2013-03-09 36 views
0

我有一个JAVE EE6项目使用JPA 2使用在Glassfish 3.1.2.2上运行的Eclipselink 2.4.1将实体持久化到MySQL数据库中。EclipseLink错误地创建表(从另一个持久性单元)

我将数据存储在两个单独的数据库中,为此我有两个JNDI JDBC资源和两个JDBC连接池。在代码中,我有两个持久性单元,每个都有不同的实体,如下所示(请注意,还有两个persistence.xml文件)。

项目结构:

EAR
-EJBOne
--persistence.xml
--- PersitenceUnitA
----(类X的列表)
-EJBTwo
- -persistence.xml
--- PersistenceUnitA
----(类别列表X + Z)
--- PersistenceUnitB
----
----(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的数据库中。

在PersistenceUnitA的数据库中不会生成使用<class>name</class>在PersistenceUnitB(类Y的列表)中手动列出的类 - 仅在orm.xml中生成类。

这很烦人,如果任何人有任何信息,为什么发生这将是伟大的。

谢谢。

+0

默认情况下为两个持久性单元查找orm.xml。尝试重命名该文件并明确列出它在PersistenceUnitB – Chris 2013-03-09 04:01:04

+0

是的!谢谢你,完美的作品。很高兴知道,我一直都是手动指定的。如果您将其作为答案发布,我会对其进行投票,未来的人会更容易找到答案。 – Tim 2013-03-09 19:42:12

回答

1

默认情况下为两个持久性单元查找orm.xml。尝试重命名文件并将其明确列出在PersistenceUnitB中

相关问题