1

我需要使 EJB3 有状态,它创建 EntityManager 的映射。我想用它来管理在运行时动态创建的多数据库。我在 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,每个 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 工作正常......它会创建表......它会持续存在......

但是如果我尝试使用新的...不要工作...它不会创建表并且不存储值

为什么?

没有错误......没有日志......只是不要在数据库上写入并且不要创建表


PS:如果我在persistance.xml 中配置两个持久性单元并且我使用两个注入的实体管理器工作正常。

4

0 回答 0