我有一个使用 JPA 2 的 JAVE EE6 项目,使用在 Glassfish 3.1.2.2 上运行的 Eclipselink 2.4.1 将实体持久保存到 MySQL 数据库中。
我将数据存储在两个单独的数据库中,为此我有两个 JNDI JDBC 资源和两个 JDBC 连接池。在代码中,我有两个持久性单元,每个都有不同的实体,如下所示(注意还有两个 persistence.xml 文件)。
项目结构:
EAR
-EJBOne
--persistence.xml
--- PersistenceUnitA ----(
X 类列表)
-EJBwo
--persistence.xml
---PersistenceUnitA
----(X + Z 类列表)
---PersistenceUnitB
- ---(Y类列表)
----(orm.xml)
我已经<property name="eclipselink.ddl-generation" value="create-tables"/>
设置了所有的持久性单元,我也<exclude-unlisted-classes>true</exclude-unlisted-classes>
设置了。
发生的事情是,在部署 PersistenceUnitB 中的 orm.xml 中的所有实体时,都在 PersistenceUnitA 的数据库中创建(作为表)。通过反复试验,我发现生成此表的原因是 EJBTwo 中 persitence.xml 中 PersistenceUnitA 中的属性(即具有两个持久性单元的 persistence.xml)。
但是,应用程序在其他方面运行正常,仅在指定的持久性单元中查找实体。即使用unitName=PersistenceUnitB 的EntityManager 确实会将实体存储在PersistenceUnitB 的数据库中。
在 PersistenceUnitB(类 Y 列表)中手动列出的类<class>name</class>
不会在 PersistenceUnitA 的数据库中生成 - 仅在 orm.xml 中生成。
这很烦人,如果有人知道为什么会发生这种情况,那就太好了。
谢谢。