それは、XMLを使ったHibernate 3の1つのSessionFactoryで複数のデータベースを使用することは可能ですか?
-
25-09-2019 - |
質問
例えば、私はそれのためにcatalog
属性またはschema
を使用することができますか?
今、私はいくつかのデータベースと複数のsessionfactoriesを使用しますが、私はこれまで、私は理解して1つのSessionFactoryを使用する必要があるので、私は、外部キーによってこれらのデータベース間の関係を作成したいと思います。たぶん、いくつかのサンプル構成は、どのように私はそれを達成することができますか?
事前に感謝します。
解決
一般的に、1つの以上のデータベース間で同期してFKSを維持しようとすると、あなたがあなた自身のシーケンスジェネレータを使用して、あなたのFK値を管理する必要になるだろう。あなたは、任意のトランザクションが適切にデータベースとロールバックの両方にまたがることが可能であることを確認するためのXADataSourceを使用する必要があります。
あなたは、それぞれのSessionFactoryが単一のデータソースに縛られているので、各データベースに対して1つのSessionFactoryを使用する必要があります。 JOTMは開き、Javaトランザクションマネージャであると春でサポートされています。
例のSpringコンテキストは次のようになります:
<?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>
希望このことができます。
所属していません StackOverflow