Spring + JPA - 2 persistence units

4 respostas
R

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

4 Respostas

R

Consegui mapear as 2 persistence units,mas como faço para quando criar uma entidade,indicar a qual banco a respectiva tabela pertence?

Leo22

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.

R

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

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.

Criado 8 de fevereiro de 2011
Ultima resposta 9 de fev. de 2011
Respostas 4
Participantes 2