3

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

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

NamedQuery of name: MyEntityName.myQueryName not found.

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

4

2 回答 2

5

EclipseLink 2.3 introduced Composite Persistence Units, which allows you to create a persistence unit that essentially acts only as a container for two or more actual persistence units. You are then able to use this single composite persistence unit in your application as if you had only one persistence unit. This should meet your goals of keeping your persistence.xml files clean for easy synchronization of your model to database. Pretty cool stuff.

于 2012-08-16T16:50:39.343 回答
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>

或者,您可以使用<jar-file>元素,引用 JPA 规范 (6.2.1.6):“如果指定,将在这些 JAR 文件中搜索托管持久性类,并处理在它们上找到的任何映射元数据注释" _

<persistence ...>
    <persistence-unit name="projectA" ...>
        ...
        <jar-file>relative/path/to/your/library.jar</jar-file>
    </persistence-unit>
</persistence>
于 2009-11-16T14:08:29.557 回答