多瓶,单持久化单元的解决方案?(Multiple jars, single persistence

2019-08-17 03:30发布

有些人,包括我在内,一直在努力与(这里特别是JavaSE的 ,例如合并来自不同模块(罐)实体整合到一个持久化单元JPA 2.0:从不同的JAR自动添加实体类PersistenceUnit * )。 基于答案有做到这一点不容易直接的方法。 一个解决方案是从单一的持久化单元文件中的所有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映射文件包含来自多个罐子成一个单一的持久化单元的实体。

我的问题是:这是允许的JPA映射文件使用或我的坚持提供商(休眠)只是一个副作用?

Answer 1:

是的,这是由JPA规范允许的。

XML实体映射旨在覆盖JPA注解。 除非你专门使用更改默认行为<xml-mapping-metadata-complete/>标签,在没有XML映射JPA提供商将使用标注。

下面是从摘录JPA 2.0规范 :

12.1使用XML描述

... XML对象/关系映射描述符是否被用于选择性地覆盖注释值或者是否不存在或存在包含在实体的映射元素控制的持久性单元的默认值子元素的XML的映射元数据完成子元件的它作为以Java语言元数据标注完整的替代品。

如果指定了XML映射元数据 - 完整的子元素,全套持久化单元映射元数据包含在持久化单元的XML映射文件,并在类的任何持久性的注释被忽略。



文章来源: Multiple jars, single persistence unit solution?