Est-il possible d'utiliser plusieurs bases de données avec une SessionFactory Hibernate 3 avec XML?

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

  •  25-09-2019
  •  | 
  •  

Question

par exemple puis-je utiliser l'attribut catalog ou schema pour elle?
Maintenant, j'utiliser plusieurs bases de données et plusieurs sessionfactories mais je voudrais créer des relations entre ces bases de données par les clés étrangères, donc je dois utiliser un SessionFactory pour autant que je comprends. Peut-être une configuration d'exemple, comment puis-je y parvenir?
Merci à l'avance

Était-ce utile?

La solution

En général, en essayant de garder les clefs étrangères dans synch dans la base de données plus de 1 va vous obliger à gérer vos valeurs FK en utilisant votre propre générateur de séquence. Vous aurez besoin d'utiliser un XADataSource pour faire en sorte que toutes les transactions sont en mesure de couvrir les deux bases de données et rollback de façon appropriée.

Vous aurez besoin d'utiliser une SessionFactory pour chaque base de données puisque chaque SessionFactory est liée à une seule source de données. JOTM est Ouvrir Java Gestionnaire de transactions et est pris en charge par Spring.

Un exemple contexte de printemps ressemblerait à ceci:

<?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>

Hope this helps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top