2013-02-22 104 views
21

包括我在內的一些人一直在努力將來自不同模塊(罐子)的實體合併到單個持久性單元中(尤其是JavaSE,例如這裏JPA 2.0: Adding entity classes to PersistenceUnit *from different jar* automatically)。根據答案,沒有簡單的方法可以做到這一點。其中一個解決方案是列出來自單個持久性單元文件中所有jar的所有類,但這不是很優雅。我可能會無意中找到另一種方式。通常,我所有的實體類都使用註釋進行映射。作爲用於溶液:persistence.xml可以包括多個XML映射文件,例如:!多個瓶子,單個持久性單元解決方案?

的main.jar META-INF/persistence.xml中:

<persistence-unit name="PU" transaction-type="RESOURCE_LOCAL"> 
    <mapping-file>META-INF/order-mappings.xml</mapping-file> 
    <mapping-file>META-INF/customer-mappings.xml</mapping-file> 
</persistence-unit> 

的映射文件可以放置在不同的罐。我注意到的是,它們可能含有<entity>元素沒有任何屬性,如:!

order.jar META-INF /訂單mappings.xml

<entity-mappings>  
    <entity class="com.company.Order"></entity>  
</entity-mappings> 

即使映射文件沒有按不映射任何屬性無論如何,Java類中的註釋都被納入考慮範圍並且一切看起來都很好!這意味着僅通過包含來自特定JAR的XML映射文件就可以很容易地將來自多個jar的實體包含到單個持久性單元中。

我的問題是:這是允許的JPA映射文件使用或我的堅持提供商(休眠)只是一個副作用?

+0

對不起,我刪除了評論 – cproinger 2013-05-09 11:33:39

+0

問題是元模型代不會以這種方式工作。這些類的元模型是空的。 – kboom 2014-04-26 06:11:39

+0

感謝您的提問/提示。你救了我的一天! ;) – Mirko 2014-09-16 04:16:35

回答

6

是的,這是由JPA規範允許的。

XML實體映射旨在覆蓋JPA註解。 除非您使用<xml-mapping-metadata-complete/>標記專門更改默認行爲,否則JPA提供程序將在沒有XML映射的情況下使用註釋。

這裏是從JPA 2.0 spec的摘錄:包含在

12.1使用XML描述符

的...的缺失或 存在於XML的映射元數據完成子元件的 XML對象/關係映射描述符 是否被用於選擇性地覆蓋註釋值或實體 - 映射 元件控制的持久性單元的默認值子元素是否有利於 作爲Java語言元數據註釋的完整替代。

如果 指定了XML的映射元數據完成子元件,所述 成套持久化單元映射元數據被包含在用於持久性單元的XML映射文件 ,任何持久性 註解的類被忽略。

相關問題