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 つの注入されたエンティティ マネージャーを使用すると、正常に動作します。