空杯心态虚怀若谷 2012-08-24
公司的项目框架搭建可以说是几经周折。之前的项目一直用的SSH框架,老总觉得这种架构开发效率太低了,建议把hibernate去掉或者换成是其他的持久层框架。我把原有的项目中hibernate的部分给去掉,用spring的jdbcTemplate来操作数据库。后来发现,这样做有些时候也是很费劲的,尤其是对大表的操作。为提高开发效率,又引入了hibernate框架。这样一来,即可以通过spring的jdbcTemplate直接访问数据库也可以通过hibernate来访问数据库。但这里始终有一个问题,就是事物的共享问题。Spring的jdbcTemplate和hibernate是分开配置的,没有统一交由一个类来进行管理,如果程序中有两者协同处理,很容易出现事物不能全部回滚的问题。这种担心一直都让我惴惴不安。
有没有一种机制可以让两者共用事物达到理想中的共存呢?查阅文档发现,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>