多个罐子,单个持久性单元解决方案



包括我在内的一些人一直在努力将来自不同模块(jar(的实体合并到一个持久单元中(尤其是使用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/订单映射.xml

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

即使映射文件没有映射任何属性,Java类中的注释也会被考虑在内,一切似乎都很好!这意味着,只需包含特定JAR中的XML映射文件,就可以很容易地将多个jar中的实体包含到一个持久性单元中。

我的问题是:这是允许使用JPA映射文件,还是只是我的持久性提供程序(Hibernate(的副作用?

是的,JPA规范允许这样做。

XML实体映射被设计为覆盖JPA注释。除非您使用 <xml-mapping-metadata-complete/>标记专门更改默认行为,否则JPA提供者将在没有XML映射的地方使用注释。

以下是JPA 2.0规范的摘录:

12.1使用XML描述符

缺席或中包含的xml映射元数据完整子元素的存在持久性单元默认实体映射的子元素元素控制XML对象/关系映射描述符用于有选择地覆盖注释值或是否提供作为Java语言元数据注释的完整替代方案。

如果指定xml映射元数据完整子元素包含持久性单元的完整映射元数据集在持久性单元的XML映射文件中,以及任何持久性类上的注释将被忽略。

相关内容

  • 没有找到相关文章