我想使用一个类和两个 JPA 持久性单元,因此能够将数据存储在不同的表(甚至数据库)和不同的定义中。
根据 JPA2.2 规范,这应该是可能的,但我遇到了奇怪的行为。我正在使用使用 eclipselink 的 payara。
有关完整描述和复制器,请参阅此github 项目。
我希望有一个人可以帮助我。
我想使用一个类和两个 JPA 持久性单元,因此能够将数据存储在不同的表(甚至数据库)和不同的定义中。
根据 JPA2.2 规范,这应该是可能的,但我遇到了奇怪的行为。我正在使用使用 eclipselink 的 payara。
有关完整描述和复制器,请参阅此github 项目。
我希望有一个人可以帮助我。
这不起作用的原因是eclipselink weaving。这样做是操纵实体类的字节码以扩展它们的功能,从而提供各种优化。
然而,问题是生成的“编织”类取决于persistence.xml 和orm.xml 中定义的定义。
这意味着在我的情况下,因为我有两个不同的 persistence.xml/orm.xml 组合,我需要两个反映不同功能的 Foo.class 和 Bar.class 文件。这当然行不通。
解决方案是关闭编织,这可以使用 persistence.xml 中的属性来完成
<property name="eclipselink.weaving" value="off"/>
如果您想查看实际的“编织”类,您可以使用静态编织。这可以使用这个属性来完成
<property name="eclipselink.weaving" value="static"/>
和这个Maven 插件
<plugin>
<groupId>de.empulse.eclipselink</groupId>
<artifactId>staticweave-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<phase>process-classes</phase>
<goals>
<goal>weave</goal>
</goals>
<configuration>
<persistenceXMLLocation>META-INF/persistence.xml</persistenceXMLLocation>
<logLevel>FINE</logLevel>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.jpa</artifactId>
<version>2.7.7.payara-p3</version>
</dependency>
</dependencies>
</plugin>
然后,当您构建项目时,您可以反编译 jar 中的类以查看发生了什么。
谢谢你Cris给我指点 eclipselink weaving。