是否有可能在Hibernate 3中使用带有一个SessionFactory的数据库?

问题描述:

例如,我可以使用catalog属性或schema吗?
现在我使用几个数据库和几个sessionfactories,但我想通过外键在这些数据库之间创建关系,所以我需要使用一个SessionFactory,据我了解。也许有一些示例配置,我该如何实现它?

预先感谢是否有可能在Hibernate 3中使用带有一个SessionFactory的数据库?

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

因为每个SessionFactory绑定到一个DataSource,所以您将需要为每个数据库使用一个SessionFactory。 JOTM是Open Java Transaction Manager,并受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/[email protected]:port:DB1"/> 
</bean> 

<bean id="oracle2DataSourceTarget" class="oracle.jdbc.xa.client.OracleXADataSource"> 
<property name="URL" value="jdbc:oracle:thin:user/[email protected]: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> 

希望这有助于。