我有一个JavaEE的项目,利用多个持久化单元的。 有没有什么办法可以指定一个特定的JPA实体属于哪个持久化单元? 一些实体是一个数据源,而有些则是在我的第二个数据源。 有没有办法在两个使用注释进行区分?
Answer 1:
要指定持久单元的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 />
Answer 2:
该@PersistenceUnit
应该是可用的,以及(我还没有尝试过,然而,虽然)
如
@PersistenceUnit(unitName="persistenceUnit2")
@Entity
class XPTO {
}
根据JavaDoc( http://docs.oracle.com/javaee/6/api/javax/persistence/PersistenceUnit.html )
“表示上的EntityManagerFactory和其相关联的持久性单元的依赖关系。”
的unitName(可选)如在persistence.xml文件中定义的持久性单元的名称。
Answer 3:
你还可以识别从该持久性单元的实体属于通过识别注册它EntityManager的。
被管理实体属于持久性上下文,和持久性的上下文属于持久性单元。 因此,在这个例子:
@PersistenceContext(unitName="persistence-unit-1")
EntityManager em1;
@PersistenceContext(unitName="persistence-unit-2")
EntityManager em2;
em1.persist(entity1);
em2.persist(entity2);
使用实体属于持久单元-1和实体2属于持久单元-2。 这不是那么明确就像在persistence.xml中指定的<class>标签,但你可以有相同的实体类中的持久单位仍然分化为每个实体实例属于哪个单位。
文章来源: JPA Entity - Specify Persistence Unit?