我有一个使用多个持久性单元的 JavaEE 项目。有没有办法指定特定 JPA 实体属于哪个持久性单元?一些实体在一个数据源中,而其他实体在我的第二个数据源中。有没有办法使用注释来区分两者?
问问题
23968 次
3 回答
10
要指定Entity
属于哪个持久单元,请使用以下persistence.xml
文件:
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="user" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/myApp</jta-data-source>
<class>com.company.User</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<!-- properties -->
</properties>
</persistence-unit>
<persistence-unit name="data" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/myApp_data</jta-data-source>
<!--<mapping-file>META-INF/myApp_entities.xml</mapping-file> You can also use mapping files.-->
<class>com.company.Data</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<!-- properties -->
</properties>
</persistence-unit>
</persistence>
注意使用<exclude-unlisted-classes />
.
于 2013-04-25T02:13:38.610 回答
2
应该也可以使用(虽然@PersistenceUnit
我还没有尝试过)
例如
@PersistenceUnit(unitName="persistenceUnit2")
@Entity
class XPTO {
}
来自 Javadoc ( http://docs.oracle.com/javaee/6/api/javax/persistence/PersistenceUnit.html )
“表示对 EntityManagerFactory 及其关联的持久性单元的依赖。”
unitName (可选)persistence.xml 文件中定义的持久性单元的名称。
于 2015-07-31T16:30:13.710 回答
1
您还可以通过识别注册实体的 EntityManager 来识别实体属于哪个持久单元。
一个托管实体属于一个持久化上下文,一个持久化上下文属于一个持久化单元。所以在这个例子中:
@PersistenceContext(unitName="persistence-unit-1")
EntityManager em1;
@PersistenceContext(unitName="persistence-unit-2")
EntityManager em2;
em1.persist(entity1);
em2.persist(entity2);
entity1 属于 persistence-unit-1,entity2 属于 persistence-unit-2。它不像在 persistence.xml 中指定 <class> 标记那样明确,但是您可以在两个持久单元中拥有相同的实体类,并且仍然可以区分每个实体实例属于哪个单元。
于 2013-04-25T22:20:45.507 回答