Oi, eu sou iniciante em JPA e então a minha dúvida é a seguinte: Eu queria usar 2 persistance units cada um deles ligado a um banco de dados. O que acontece é que embora eu especifique no código os dois persistence units a apontar para base de dados diferentes ele só vai usar uma delas e apenas se o persistence unit name for “default”. Não é possível usar outro nome no persistence unit para além de “default”?
Sim, é possível.
Esse persistence.xml abaixo é utilizado em um projeto Open Source:
[code]<?xml version="1.0" encoding="UTF-8"?>
<persistence-unit name="QueryTesterHibernate" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.uaihebert.model.Dog</class>
<class>com.uaihebert.model.Car</class>
<class>com.uaihebert.model.Tire</class>
<class>com.uaihebert.model.House</class>
<class>com.uaihebert.model.Person</class>
<class>com.uaihebert.model.Address</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver" />
<property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:mem:hibernate" />
<property name="javax.persistence.jdbc.user" value="sa" />
<property name="javax.persistence.jdbc.password" value="" />
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />
<property name="hibernate.connection.shutdown" value="true" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.format_sql" value="false" />
</properties>
</persistence-unit>
<persistence-unit name="QueryTesterOpenJPA" transaction-type="RESOURCE_LOCAL">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<class>com.uaihebert.model.Dog</class>
<class>com.uaihebert.model.Car</class>
<class>com.uaihebert.model.Tire</class>
<class>com.uaihebert.model.House</class>
<class>com.uaihebert.model.Address</class>
<class>com.uaihebert.model.Person</class>
<properties>
<property name="openjpa.ConnectionDriverName" value="org.hsqldb.jdbcDriver" />
<property name="openjpa.ConnectionURL" value="jdbc:hsqldb:mem:OPenJPA" />
<property name="openjpa.ConnectionUserName" value="sa" />
<property name="openjpa.ConnectionPassword" value="" />
<property name="openjpa.Log" value="DefaultLevel=WARN, Tool=WARN"/>
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />
<property name="openjpa.DynamicEnhancementAgent" value="true"/>
<property name="openejb.validation.output.level" value="verbose" />
</properties>
</persistence-unit>
<persistence-unit name="QueryTesterEclipseLink" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>com.uaihebert.model.Dog</class>
<class>com.uaihebert.model.Car</class>
<class>com.uaihebert.model.Tire</class>
<class>com.uaihebert.model.House</class>
<class>com.uaihebert.model.Address</class>
<class>com.uaihebert.model.Person</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver" />
<property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:mem:e" />
<property name="javax.persistence.jdbc.user" value="sa" />
<property name="javax.persistence.jdbc.password" value="" />
<property name="eclipselink.ddl-generation" value="create-tables" />
<property name="eclipselink.ddl-generation.output-mode" value="database" />
</properties>
</persistence-unit>
[/code]Note que tem 3 persistence units declarados.