在我的应用程序中,我有两组不同的实体,对于每个实体,我想使用一个单独的持久性单元。
如何做到这一点,以便每个持久性单元仅处理用@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>
但这不起作用
答案 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;