2013-03-09 54 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中