例如我可以用它catalog属性或schema?结果现在我用几个数据库和几个sessionfactories,但我想通过创建外键这些数据库之间的关系,所以我需要使用一个SessionFactory的,据我了解。也许一些示例配置,我怎么能实现呢? 搜索结果 由于事先

有帮助吗?

解决方案

在一般情况下,试图让FKS在同步跨越超过1个数据库将需要您管理使用自己的序列发生器的FK值。您将需要使用的XADataSource,以确保任何交易都能够跨越这两个数据库,并适当地回滚。

您将需要使用一个会话工厂每个数据库,因为每个会话工厂被绑定到单个数据源。 JOTM是打开Java事务管理和由Spring支持的。

一个例子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>

希望这有助于。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top