如何合并/扩展来自不同JAR的持久性单元?

时间:2009-07-31 10:16:08

标签: jpa eclipselink persistence-unit

我使用JPA持久性作为我的数据模型,使用Eclipselink作为持久性提供程序。我有一个模块化(OSGi)应用程序,其中一个模块包含标准数据模型和一个自动包含包中所有实体的持久性单元。持久性提供程序位于另一个模块中,该模块运行良好。

现在我想要第三个模块将一些实体添加到持久性单元。我怎么做?我找到了this solution,这似乎是Spring特有的,我没有使用。该方法的摘要是编写一个挂钩到持久性单元处理的后处理器,并手动合并<class>文件中的persistence.xml条目。

是否可以合并持久性单元?任何人都可以建议一个解决方法吗?

2 个答案:

答案 0 :(得分:5)

首先,这是Dynamic-JPA上的链接,它们提供了一种动态更新实体的方法。我会首先探讨这个选项。

<小时/> 这是来自OSGi的另一个链接(PDF),有一些处理持久性的顶级图和可能有用的EntityManagerFactory。

<小时/> 一种有趣的方法但可能不相关

以下是creating persistence units programmaticly上的链接,但未使用persistence.xml文件(您无法真正做到,但答案提供了一些问题的见解)。 philk提供了有关如何从persistence.xml文件中删除提供程序的建议。如果您遵循此方法,则可以将实体组合到特定的持久性单元中。

“在Hibernate的旧时代,我可以创建一个会话和 即时添加我的课程。似乎从未进入SUNs JPA 眼镜。但是我已完全删除了提供程序 persistence.xml并使用EMF的属性将其传递给EL。这个 似乎工作正常。 persistence.xml中唯一剩下的就是规范 的课程。我想暴露这个方法不会太难 解析EL中的类名并为其创建ClassDescriptor 作为EL JPA Provider的公共方法。 “


最后,我们来到hackish解决方案,已经建议做了,只需在事后编辑你的persistence.xml文件。我相信这会奏效(虽然我没有尝试过),但绝对是一种选择。

答案 1 :(得分:0)

我有一个WAR文件包含persistence.xml文件的设置。这里已经描述的解决方案应该可用于JAR,WAR和EAR。 JPA 2.0: Adding entity classes to PersistenceUnit *from different jar* automatically