欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Hibernate 与spring jdbcTemplate共享事物的管理

程序员文章站 2022-07-13 08:54:58
...

公司的项目框架搭建可以说是几经周折。之前的项目一直用的SSH框架,老总觉得这种架构开发效率太低了,建议把hibernate去掉或者换成是其他的持久层框架。我把原有的项目中hibernate的部分给去掉,用springjdbcTemplate来操作数据库。后来发现,这样做有些时候也是很费劲的,尤其是对大表的操作。为提高开发效率,又引入了hibernate框架。这样一来,即可以通过springjdbcTemplate直接访问数据库也可以通过hibernate来访问数据库。但这里始终有一个问题,就是事物的共享问题。SpringjdbcTemplatehibernate是分开配置的,没有统一交由一个类来进行管理,如果程序中有两者协同处理,很容易出现事物不能全部回滚的问题。这种担心一直都让我惴惴不安。

 

    有没有一种机制可以让两者共用事物达到理想中的共存呢?查阅文档发现,HibernateTransactionManager真有这种机制,不禁欣喜若狂。

    不使用spring jdbcTemplate时,applicationContext.xml的配置如下:

	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="lobHandler" ref="oracleLobHandler" />
		<property name="configLocation" value="classpath:hibernate.cfg.xml" />
	</bean>


	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>

 

 

 

 

 

 

    Hibernate spring jdbcTemplate共同操作的配置如下:

 

 

 

	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
	   <property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />
	   <property name="jdbcUrl" value="jdbc:oracle:thin:@192.168.0.7:1521:ORCL" />
	   <property name="user" value="hb0815" />
	   <property name="password" value="hb0815" />
	   <property name="minPoolSize" value="5" />
   	   <property name="maxPoolSize" value="10"/>   
   	   <property name="initialPoolSize" value="5"/>
	</bean>
	
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource"><ref bean="dataSource"/></property>
    </bean>
    
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="lobHandler" ref="oracleLobHandler" />
		<property name="configLocation" value="classpath:hibernate.cfg.xml" />
	</bean>

	<context:component-scan base-package="com.hzunitech" />

	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
		<property name="dataSource"><ref bean="dataSource"/></property>		
	</bean>