Ist es möglich, mehrere Datenbanken mit einer Session in Hibernate 3 mit XML zu verwenden?

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

  •  25-09-2019
  •  | 
  •  

Frage

zum Beispiel kann ich catalog Attribut oder schema für sie?
Jetzt benutze ich mehrere Datenbanken und mehrere sessionfactories aber ich möchte durch Fremdschlüssel Beziehungen zwischen diesen Datenbanken erstellen, so dass ich ein Session so weit verwenden müssen wie ich sie verstehe. Vielleicht sind einige Beispielkonfiguration, wie kann ich es erreichen?
Vielen Dank im Voraus

War es hilfreich?

Lösung

In der Regel versuchen, dich über mehr als 1 Datenbank FKs synchron zu halten, werden Sie bei der Verwaltung Ihrer FK Werte benötigen, um Ihren eigenen Sequenz-Generator verwenden. Sie müssen einen XADataSource verwenden, um sicherzustellen, dass alle Transaktionen der Lage sind, beide Datenbanken zu überbrücken und in geeigneter Weise Rollback.

Sie müssen eine Session für jede Datenbank verwenden, da jede Session auf eine einzige Datasource gebunden ist. JOTM ist der öffnen Java Transaction Manager und wird durch die Feder unterstützt.

Ein Beispiel Frühling Kontext würde wie folgt aussehen:

<?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, das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top