我将 JPA 持久性用于我的数据模型,并将 Eclipselink 作为持久性提供者。我有一个模块化 (OSGi) 应用程序,其中一个模块包含标准数据模型和一个持久性单元,该单元自动包含包中的所有实体。持久性提供程序位于另一个模块中,该模块运行良好。
现在我想要第三个模块将一些实体添加到持久性单元。我怎么做?我找到了this solution ,这似乎特定于我没有使用的 Spring。该方法的总结是编写一个 Hook 到持久性单元处理并手动合并<class>
的后处理器。来自 persistence.xml
的条目文件。
是否可以合并持久性单元?有人可以提出解决方法吗?
最佳答案
首先,这是 Dynamic-JPA 上的链接它们提供了一种动态更新实体的方法。我会先探索这个选项。
这是来自 OSGi 的另一个链接 (PDF),其中有一些处理持久性和 EntityManagerFactory 的顶级图表可能有用。
一种有趣的方法,但可能不相关
这是 creating persistence units programmaticly 上的链接不使用persistence.xml 文件(你不能真正做到,但答案提供了对问题的一些见解)。 philk 提供了有关如何从 persistence.xml 文件中删除提供程序的建议。如果您遵循此方法,您可能能够将您的实体组合成一个特定的持久性单元。
“好吧,在 Hibernate 过去的美好时光里,我可以创建一个 session 并
即时将我的类(class)添加到其中。似乎从未进入 SUNs JPA
眼镜。但是我已经从
persistence.xml 并使用 EMF 的属性将其交给 EL。这
似乎工作正常。 persistence.xml 中唯一剩下的就是规范
的类。我想暴露方法不会太难
解析 EL 中的类名并为其创建 ClassDescriptor
作为 EL JPA Provider 的公共(public)方法。 "
最后,我们来到了骇人听闻的解决方案,已经提出了建议,只需在事后编辑您的 persistence.xml 文件。我相信这会奏效(尽管我还没有尝试过),但这绝对是一种选择。
关于jpa - 如何合并/扩展来自不同 JAR 的持久性单元?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1211777/