SessionFactory如何管理多个库的配置

      上两篇对于跨库Session事物死锁问题已经给出了描述与解决之道,这个是具体的解决方案(第一种):
由于项目是JNDI为中介连接数据源与Hibernate,因而若要一个SessionFactory管理多个库是就必须JNDI中声明一个主库(声明多个库也是可以的,不过由于一个SessionFactory只能对应一个库因而对多个库的声明没有意义),如下:
<Resource name="houseInfoDS" auth="Container"
type="javax.sql.DataSource"
factory="org.objectweb.jndi.DataSourceFactory" maxWait="5000"
maxActive="300" maxIdle="2" username="sa" password="***"
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=DGHouseInfo;SelectMethod=cursor" />

以下就比较正常,对此库经行Spring配置,并将不过需注意的是对于其他库所对应的Dao只是也要实现当前库的hibernateTemplate即可无须其他操作(就是该怎么配就怎么配,不要做无必要的配置).这里只拿出 SessionFactory,hibernateTemplate,BusinessDao的配置:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="houseInfoDS" />
</property>
<property name="mappingDirectoryLocations">
<list>      //持久化类的包(这里必须所有的Pojo包,包括其他库的)
<value>
classpath:/com/dgsoft/data/biz/info/bo/
</value>
<value>classpath:/com/dgsoft/data/biz/record/bo/
</value>
<value>classpath:/com/dgsoft/data/system/bo/
</value>
<value>classpath:/com/dgsoft/data/ensure/bo/
</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect"> //方言---MSSSQL
org.hibernate.dialect.SQLServerDialect
</prop>
</props>
</property>//使用JOTM跨库事物也就是他使得Session可以锁其他库的数据
<property name="jtaTransactionManager" ref="jotm" />
</bean>
//我们在每个DAO的实现利都会使用getHibernateTemplate()方法,其实获得的就是下面的配置东东,他是被Spring()封装了的对SQL操作方法,及MSSQL抛出异常进行Java式的封装----经查阅MSSQL的一场均是46等数字,因而必须重新编译异常来反映错误.
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
<property name="jdbcExceptionTranslator">
<ref bean="jdbcExceptionTranslator" />
</property>
</bean>
//说实在这个就是一点改动都没有!
<bean id="businessDao" class="com.dgsoft.data.biz.record.dao.impl.BusinessDaoImpl">
<property name="hibernateTemplate">
<ref bean="hibernateTemplate" />
</property>
</bean>
以上就是配置,可以看出来没有特殊的地方.那么到底是怎么实现一个SessionFactory管理多个库的呢!答案是在POJO的配置文件(例子是其他库的一个Pojo映射):
<class name="包.CloseDownHouse" table="CloseDownHouse" schema="dbo" catalog="DGHouseRecord" >
就是说让Session使用DGHouseRecord.表名即可使用该库的表(即使此库非Session对应)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值