JPA Entity - Specify Persistence Unit?

前端 未结 3 2085
长发绾君心
长发绾君心 2020-12-30 08:33

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

相关标签:
3条回答
  • 2020-12-30 09:00

    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.

    0 讨论(0)
  • 2020-12-30 09:02

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

    0 讨论(0)
  • 2020-12-30 09:20

    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.

    0 讨论(0)
提交回复
热议问题