代码之家  ›  专栏  ›  技术社区  ›  James McMahon

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

  •  9
  • James McMahon  · 技术社区  · 15 年前

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

    现在,我想要第三个模块向持久性单元添加一些实体。我该怎么做?我发现 this solution 这似乎是特定于我不使用的弹簧。该方法的总结是编写一个后处理器,它钩住持久性单元处理并手动合并 <class> 来自的条目 persistence.xml 文件夹。

    是否可以合并持久性单元?有人能提出解决办法吗?

    2 回复  |  直到 10 年前
        1
  •  5
  •   Robert Greiner    15 年前

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


    这是另一个链接( PDF )在OSGi中,有一些顶层图表处理持久性和EntityManagerFactory,这些图表可能很有用。


    一种有趣的方法 但可能是无关的

    这里有一个链接 creating persistence units programmaticly 如果不使用persistence.xml文件(这是您不能真正做到的,但答案提供了对问题的一些洞察)。philk提供了如何从persistence.xml文件中删除提供程序的建议。如果您遵循这个方法,您可能能够将您的实体合并到一个特定的持久性单元中。

    “在冬眠的好日子里,我可以创建一个会话, 将我的类即时添加到其中。似乎没能成为太阳JPA 规格。但是,我已将提供商从 persistence.xml并使用EMF的属性将其提交给EL。这个 似乎工作正常。persistence.xml中只剩下规范了 在班级里。我想公开这个方法并不难 解析EL中的类名并为其创建类描述符 作为EL JPA提供程序的公共方法。”


    最后,我们来讨论这个黑客解决方案,已经有人建议这样做,只需在事实发生后编辑persistence.xml文件。我相信这是可行的(虽然我还没有尝试过),但这绝对是一个选择。

        2
  •  0
  •   Jesper Tejlgaard    10 年前

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