هل من الممكن استخدام العديد من قواعد البيانات مع جلسة واحدة في Hibernate 3 مع XML؟

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

  •  25-09-2019
  •  | 
  •  

سؤال

على سبيل المثال ، هل يمكنني استخدامه catalog ميزة أو schema لذلك؟
الآن أستخدم العديد من قواعد البيانات والعديد من SessionFactories ، لكنني أود إنشاء علاقات بين قواعد البيانات هذه بواسطة المفاتيح الأجنبية ، لذلك أحتاج إلى استخدام SessionFactory بقدر ما أفهم. ربما بعض تكوين العينة ، كيف يمكنني تحقيق ذلك؟

شكرا لك مقدما

هل كانت مفيدة؟

المحلول

بشكل عام ، فإن محاولة الحفاظ على FKS في أكثر من قاعدة بيانات واحدة ستتطلب منك إدارة قيم FK الخاصة بك باستخدام مولد التسلسل الخاص بك. ستحتاج إلى استخدام XadataSource للتأكد من أن أي معاملات قادرة على امتداد قواعد البيانات والتراجع بشكل مناسب.

ستحتاج إلى استخدام جلسة واحدة لكل قاعدة بيانات لأن كل SessionFactory مرتبط بمصاعد بيانات واحدة. JOTM هو افتح مدير معاملات Java ويدعمه الربيع.

مثال على سياق الربيع يبدو هكذا:

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

أتمنى أن يساعدك هذا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top