Java 一个Persistence.xml中包含两个持久性单元

Java 一个Persistence.xml中包含两个持久性单元,java,jpa,persistence,persistence.xml,Java,Jpa,Persistence,Persistence.xml,我们创建了一些我们所有项目都将使用的库,这些库将提供我们所有系统的基本功能(登录、一些管理等)。但是应用程序本身可以使用另一个数据库 我们所做的是用两个persist单元创建Persistence.xml。并将所有核心库实体打包在一个名为“LN model.jar”的jar中,将out test app的所有实体打包在“app model.jar”中。但出于某种原因,我们仍然得到以下信息 无法解析与名为[gfdeploy#/Users/zkropotkine/WORK/SeguridadCore

我们创建了一些我们所有项目都将使用的库,这些库将提供我们所有系统的基本功能(登录、一些管理等)。但是应用程序本身可以使用另一个数据库

我们所做的是用两个persist单元创建Persistence.xml。并将所有核心库实体打包在一个名为“LN model.jar”的jar中,将out test app的所有实体打包在“app model.jar”中。但出于某种原因,我们仍然得到以下信息

无法解析与名为[gfdeploy#/Users/zkropotkine/WORK/SeguridadCore/dist/gfdeploy/SeguridadCore-war]的模块范围内的持久性上下文引用名称[x.x.x.x.listener.InicializadorListener/em]对应的持久性单元。请验证您的申请

这是我们的Persistence.xml


org.eclipse.persistence.jpa.PersistenceProvider
jdbc/x
App-model.jar
假的
org.eclipse.persistence.jpa.PersistenceProvider
jdbc/y
LN-model.jar
假的


顺便说一下,我们将Persistence.xml放在一个jar中,并将其添加到我们的企业项目(EAR)中。

问题在于JPA不知道要使用哪个持久性单元。当您只有一个持久性单元时,不会发生此问题。要修复此问题,请执行以下操作:


您需要在Ejb中指定一个持久化单元:@PersistenceContext(unitName=“…”),该持久化单元没有

,您可以添加注释:

@PersistenceUnit(name = "x")
EntityManagerFactory entityManagerFactory;

@PersistenceContext(unitName = "y")
EntityManager entityManager;
或者您可以手动创建它:

EntityManagerFactory emfA = Persistence.createEntityManagerFactory("x", properties);
EntityManagerFactory emfB = Persistence.createEntityManagerFactory("y", properties);
有关更多详细信息,请参阅以下链接: 非常有用,对我有帮助