هل من الممكن استخدام العديد من قواعد البيانات مع جلسة واحدة في Hibernate 3 مع XML؟
-
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>
أتمنى أن يساعدك هذا.