¿Es posible utilizar varias bases de datos con una SessionFactory de Hibernate 3 con XML?

StackOverflow https://stackoverflow.com/questions/4208370

  •  25-09-2019
  •  | 
  •  

Pregunta

, por ejemplo, puedo usar el atributo catalog o schema por ello?
ahora el uso de varias bases de datos y varios sessionfactories pero me gustaría crear relaciones entre estas bases de datos de claves externas, así que tengo que usar una SessionFactory por lo que yo entiendo. Tal vez algunos de configuración de ejemplo, cómo puedo lograrlo?
Gracias de antemano

¿Fue útil?

Solución

En general, tratando de mantener en sincronía FKs través de más de 1 base de datos va a requerir a administrar sus valores FK utilizando su propio generador de secuencia. Usted tendrá que utilizar un XADataSource para asegurar que todas las transacciones son capaces de abarcar ambas bases de datos y deshacer adecuadamente.

Usted tendrá que utilizar una SessionFactory para cada base de datos, ya que cada SessionFactory está ligado a una sola fuente de datos. JOTM es la abierto de Java Transaction Manager y es apoyado por la primavera.

Un contexto primavera ejemplo sería el siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager">
 <property name="userTransaction" ref="jotm"/>
</bean>

<bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean"/>

<bean id="oracle1DataSource" class="oracle.jdbc.xa.client.OracleXADataSource">
 <property name="xaDataSource" ref="oracle1DataSourceTarget"/>
 <property name="transactionManager" ref="jotm"/>
</bean>

<bean id="oracle2DataSource" class="oracle.jdbc.xa.client.OracleXADataSource">
 <property name="xaDataSource" ref="oracle2DataSourceTarget"/>
 <property name="transactionManager" ref="jotm"/>
</bean>

<beans>
<bean id="oracle1DataSourceTarget" class="oracle.jdbc.xa.client.OracleXADataSource">
 <property name="URL" value="jdbc:oracle:thin:user/password@server:port:DB1"/>
</bean>

<bean id="oracle2DataSourceTarget" class="oracle.jdbc.xa.client.OracleXADataSource">
 <property name="URL" value="jdbc:oracle:thin:user/password@server:port:DB2"/>
</bean>

<bean id="oracle1SessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
 <property name="dataSource" ref="oracle1DataSource"/>
 <property name="jtaTransactionManager" ref="jotm"/>
 <property name="useTransactionAwareDataSource" value="true"/>
 <property name="hibernateProperties">
   <props>
     <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
   </props>
 </property>
 <property name="mappingResources">
   <list>
     <value>org/example/Entity.hbm.xml</value>
   </list>
 </property>
</bean>

<bean id="oracle2SessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
 <property name="dataSource" ref="oracle2DataSource"/>
 <property name="jtaTransactionManager" ref="jotm"/>
 <property name="useTransactionAwareDataSource" value="true"/>
 <property name="hibernateProperties">
   <props>
     <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
   </props>
 </property>
 <property name="mappingResources">
   <list>
     <value>org/example/Entity.hbm.xml</value>
   </list>
 </property>
</bean>

Espero que esto ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top