Uso Spring e JPA e injeto o EntityManager:
@PersistenceContext
private EntityManager entityManager;
Se quiser ter outra PU,basta indicar o nome no @PersistenceContext?
@PersistenceContext(name="em1")
private EntityManager entityManager1
@PersistenceContext(name="em2")
private EntityManager entityManager2
Consegui mapear as 2 persistence units,mas como faço para quando criar uma entidade,indicar a qual banco a respectiva tabela pertence?
Leo22
#3
dentro do persistence.xml vc pode colocar as classes para aquela unidade
sua classe.
de cara me lembro dessa forma, se tem outra forma nao sei.
Olá Léo,na verdade o meu problema é o seguinte:
Criei 2 entityManagerFactory e 2 persistence units no applicationContext:
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceXmlLocation" value="classpath:META-INF/persistence1.xml" />
<property name="dataSource" ref="myDataSource" />
<property name="persistenceUnitName" value="myPU" />
</bean>
<bean id="entityManagerFactory1"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceXmlLocation" value="classpath:META-INF/persistence2.xml" />
<property name="dataSource" ref="myDataSource2" />
<property name="persistenceUnitName" value="sql" />
</bean>
<bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="org.postgresql.Driver" />
<property name="jdbcUrl" value="jdbc:postgresql://localhost:5432/cemaris" />
<property name="user" value="xx" />
<property name="password" value="xxx" />
</bean>
<bean id="myDataSource2" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="net.sourceforge.jtds.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:jtds:sqlserver://banco:1433/dbgsuas" />
<property name="user" value="xxxx" />
<property name="password" value="xxxxx" />
</bean>
Aqui está o problema:como definir 2 datasouce e 2 EMF?
<bean id="mySessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource" />
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
Leo22
#5
cria outra declaracao de bean mudando o datasource e entitymanagerfactory e na tua aplicação tu escolhe qual usar, ja tentou isso?
<bean id="mySessionFactory2"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource2" />
</bean>
<bean id="transactionManager2 class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory2" />
</bean>
Obs: nunca trabalhei com spring, so li algo sobre, por isso nao sei se é boa pratica.