1

EntityManager のマップを作成する EJB3 をステートフルにする必要があります。実行時に動的に作成された多数のデータベースを管理するために使用したい。persistence.xml デプロイメント記述子で、デフォルトの持続性ユニットを 1 つ定義します。

私のpersistance.xml:

(私は Jboss5 を使用し、データソースを定義しました)

   <persistence-unit name="mkyong">
      <jta-data-source>java:/mkyong_jtds</jta-data-source>

        <properties>
            <property name="hibernate.archive.autodetection" value="class, hbm" />
            <property name="hibernate.hbm2ddl.auto" value="create" />
            <property name="hibernate.jdbc.batch_size" value="50" />
            <property name="hibernate.max_fetch_depth" value="5" />
            <property name="hibernate.show_sql " value="true" />
            <property name="hibernate.format_sql" value="true" />

            <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" />
            <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>

        </properties>
   </persistence-unit>

10 個の EntityManager を作成する必要があります。それぞれは接続 ulr とのみ異なり、実行時に指定された値を定義する必要があります。管理ユーザー インターフェイスから作成したい。

何かのようなもの:

@PersistenceContext(unitName="mkyong")
private EntityManager manager;

Map<String, EntityManager> entityManagerMap = new HashMap<String, EntityManager>();

entityManagerMap.put("mkyong", manager);

Map<String, Object> configOverrides = new HashMap<String, Object>();
configOverrides.put("hibernate.connection.url", "jdbc:jtds:sqlserver://127.0.0.1:1433/Anagrafe");
EntityManagerFactory programmaticEmf =
Persistence.createEntityManagerFactory("mkyong", configOverrides);
manager1=programmaticEmf.createEntityManager();
entityManagerMap.put("Anagrafe", manager1);

このサンプルでは、​​2 つの EntityManager を作成しました

'mkyong' という名前で自動的に作成された 1 つの実際の EntityManager。

'Anagrafe' という名前の実行時に作成される 1 つの EntityManager。

...

実際の EntityManager を正常に使用すると、テーブルが作成されます...永続化されます..

しかし、新しいものを使用しようとすると...動作しません...テーブルを作成せず、値を保存しません

なんで?

エラーなし...ログなし...単にDBに書き込んでテーブルを作成しないでください


PS: persistance.xml 内に 2 つの永続ユニットを構成し、2 つの注入されたエンティティ マネージャーを使用すると、正常に動作します。

4

0 に答える 0