如何从JPA持久性单元中排除或包括程序包

时间:2018-11-26 16:34:14

标签: java hibernate jpa

在我的应用程序中,我有两组不同的实体,对于每个实体,我想使用一个单独的持久性单元。

如何做到这一点,以便每个持久性单元仅处理用@Entity注释的部分实体?

我将它们分布在两个不同的程序包中,因此我打算在我拥有的两个orm.xml中做类似的事情:

<entity-mappings>
    <persistence-unit-metadata>
        <persistence-unit-defaults>
            <schema>first_schema</schema>
        </persistence-unit-defaults>
    </persistence-unit-metadata>

    <package>example.package.first</package>
</entity-mappings>

<entity-mappings>
    <persistence-unit-metadata>
        <persistence-unit-defaults>
            <schema>second_schema</schema>
        </persistence-unit-defaults>
    </persistence-unit-metadata>

    <package>example.package.second</package>
</entity-mappings>

但这不起作用

1 个答案:

答案 0 :(得分:0)

we can configure one or more persistent units in same persistent.xml

如下所示,并使用@PersistenceContext(unitName =“ ...”)为每个实体创建实体管理器,以便从dao访问。

xml configuration:
-------------------

<?xml version="1.0" encoding="UTF-8"?>
<persistence 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_1_0.xsd"
    version="1.0">

    <persistence-unit name="persistenceUnit1">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>Datasource</jta-data-source>
        <class>Entity1</class>
        <class>Entity2</class>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.DB2Dialect" />
            ....etc
        </properties>
    </persistence-unit>
    <persistence-unit name="persistenceUnit2">

    </persistence-unit> 
    //and so on 

</persistence>

Dao service
-------------
 @PersistenceContext(unitName="persistenceUnit1") 
 EntityManager entityManager;