我需要创建一个EJB3有状态,它创建一个EntityManager映射。 我想用它来管理在运行时动态创建的multy数据库。 我在persistence.xml部署描述符中定义了一个默认持久性单元。
我的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
一个真正创建的EntityManager自动命名为'mkyong'。
在运行时创建的一个名为“Anagrafe”的EntityManager。
...
如果我使用真正的EntityManager工作正常...它创建表...它仍然存在..
但如果我尝试使用新的......不要工作......它不会创建表格而不会存储值
为什么?
没有错误......没有记录......根本就不要在DB上写,也不要创建表
PS:如果我在persistance.xml中配置两个持久性单元,我使用两个注入的实体管理器工作正常。