包括我在内的一些人一直在努力将来自不同模块(jar)的实体合并到一个持久性单元中(尤其是使用JavaSE,例如JPA 2.0:Adding entity classes to PersistenceUnit *from different jar* automatically)。根据答案,没有简单的直接方法可以做到这一点。一种解决方案是在单个持久性单元文件中列出所有 jar 中的所有类,但这并不是很优雅。我可能不小心找到了另一种方法。通常我所有的实体类都是使用annotations映射的。至于解决方案: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>
映射文件可以放在不同的 jar 中。我注意到它们可能包含没有任何属性<entity>
的元素,例如:
order.jar!META-INF/order-mappings.xml
<entity-mappings>
<entity class="com.company.Order"></entity>
</entity-mappings>
即使映射文件没有映射任何属性,Java 类中的注释也会被考虑在内,一切似乎都很好!这意味着只需包含来自特定 JAR 的 XML 映射文件,就可以轻松地将来自多个 jar 的实体包含到单个持久性单元中。
我的问题是:这是允许的 JPA 映射文件使用还是我的持久性提供程序(Hibernate)的副作用?