JPA Entity - Specify Persistence Unit?

北城以北 提交于 2019-12-18 02:49:07

问题


I have a JavaEE project that makes use of multiple persistence units. Is there any way to specify which persistence unit a particular JPA Entity belongs to? Some entities are in one data source, while others are in my second data source. Is there a way to differentiate between the two using annotations?


回答1:


To specify which persistent unit an Entity belongs to, use the persistence.xml file:

<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>

Note the use of <exclude-unlisted-classes />.




回答2:


The @PersistenceUnit should be usable as well (I haven't tried it, yet, though)

e.g.

@PersistenceUnit(unitName="persistenceUnit2")
@Entity
class XPTO {
}

From the Javadoc (http://docs.oracle.com/javaee/6/api/javax/persistence/PersistenceUnit.html)

"Expresses a dependency on an EntityManagerFactory and its associated persistence unit."

unitName (Optional) The name of the persistence unit as defined in the persistence.xml file.




回答3:


Also you can identify from which persistent unit an entity belongs by identifying the EntityManager that registered it.

A managed entity belongs to a persistence context, and a persistent context belongs to a persistence unit. So in this example:

@PersistenceContext(unitName="persistence-unit-1")
EntityManager em1;

@PersistenceContext(unitName="persistence-unit-2")
EntityManager em2;

em1.persist(entity1);
em2.persist(entity2);

entity1 belongs to persistence-unit-1 and entity2 belongs to persistence-unit-2. It's not so explicit like specifying the <class> tags in persistence.xml, but you can have the same entity classes in both persistent units and still differentiate to which unit each entity instance belongs.



来源:https://stackoverflow.com/questions/16204565/jpa-entity-specify-persistence-unit

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!