2009-07-31 44 views
9

我使用Eclipselink作爲持久性提供程序的數據模型使用JPA持久性。我有一個模塊化(OSGi)應用程序,其中一個模塊包含標準數據模型和一個持久性單元,該單元自動包含包中的所有實體。持久性提供程序位於另一個模塊中,該模塊運行良好。如何合併/擴展來自不同JAR的持久性單元?

現在我想要第三個模塊將一些實體添加到持久性單元。我怎麼做?我發現this solution,這似乎是特定於我不使用的Spring。該方法的總結是編寫一個掛接到持久性單元處理中的後處理器,並手動合併persistence.xml文件中的<class>條目。

是否可以合併持久性單元?任何人都可以提出解決方法嗎?

+0

是否所有三個模塊應該在一個.ear? – 2009-08-03 17:33:19

回答

5

首先,這裏是Dynamic-JPA上的鏈接,它們提供了一種動態更新實體的方法。我會首先探討這個選項。


這是來自OSGi的另一個鏈接( PDF),有幾個關於持久性的頂層圖和可能有用的EntityManagerFactory。


一個有趣的方法但可能是不相關的

這裏是不使用persistence.xml文件(你不能真正做到creating persistence units programmaticly一個鏈接,但答案提供了一些有識之士的問題)。 philk提供了關於如何從persistence.xml文件中刪除提供者的建議。如果你遵循這個方法,你可能能夠將你的實體組合成一個特定的持久化單元。

「好了Hibernate中的美好時光,我可以只創建一個會話, 我的類添加到它的飛行。似乎從未進入太陽JPA 規範。不過,我已完全刪除從供應商 persistence.xml,並使用EMF的屬性將它交給EL。這個 似乎工作正常。留在persistence.xml中的唯一東西是這些類的spec 。我想這不會太難揭露方法 解析EL中的類名併爲其創建ClassDescriptor 作爲EL JPA Provider的公共方法。「


最後,我們來到這個黑客解決方案,已經提出過了,事後簡單編輯你的persistence.xml文件。我相信這會起作用(雖然我沒有嘗試過),但它絕對是一種選擇。