EclipseLink,EntityManager需要两个持久性单元

时间:2009-11-16 13:58:27

标签: jpa eclipselink entitymanager

我有一个jar库(或eclipse中的项目),它有自己的持久性单元(META-INF / persistence.xml)和一些实体类,另一个项目(B)使用这个。在项目B中,还有持久性单元和实体类。

在项目BI中,需要使用项目A和B中的两个实体类。但是如果我将“A”设置为持久性单元名称,如果此查询位于项目B的实体中,则EntityManager无法创建命名查询。如果我设置“B” “作为持久性单元名称,它无法从项目A的实体创建命名查询。错误消息是:

NamedQuery of name: MyEntityName.myQueryName not found.

持久性单位能以某种方式包含其他持久性单位吗?或者还有其他方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

EclipseLink 2.3引入了Composite Persistence Units,它允许您创建一个持久性单元,它基本上只作为两个或多个实际持久性单元的容器。然后,您就可以在应用程序中使用此单一复合持久性单元,就好像您只有一个持久性单元一样。这应该符合您的目标,即保持persistence.xml文件的清洁,以便轻松地将模型同步到数据库。很酷的东西。

答案 1 :(得分:2)

您可以在一个持久性单元中列出A所需的类,而另一个类中需要B的类:

<persistence ...>
    <persistence-unit name="projectA" ...>
        ....
        <class>a.Class1</class>
        <class>a.Class2</class>
        <class>a.Class3</class>
    </persistence-unit>

    <persistence-unit name="projectB" ...>
        ...
        <class>a.Class1</class>
        <class>a.Class2</class>
        <class>a.Class3</class>
        <class>b.Class1</class>
        <class>b.Class2</class>
        <class>b.Class3</class>
    </persistence-unit>
</persistence>

或者,您可以使用&lt; jar-file&gt; 元素,引用JPA规范(6.2.1.6):“如果指定,将搜索这些JAR文件以进行管理持久化类,以及在它们上找到的任何映射元数据注释都将被处理,或者它们将使用本规范定义的映射注释默认值进行映射。这些JAR文件是相对于持久性单元的根指定的(例如,utils / myUtils。罩)。

<persistence ...>
    <persistence-unit name="projectA" ...>
        ...
        <jar-file>relative/path/to/your/library.jar</jar-file>
    </persistence-unit>
</persistence>