`
hz_chenwenbiao
  • 浏览: 994861 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

hibernate单独事务与纳入spring旗下的事务管理方式

阅读更多

Hibernate要开启事务,然后再进行数据库的操作,最后提交事务,这过程都是要我们手写的,而加入spring后,那么事务的开启关闭等就可以交给spring来管理,可以在spring配置文件里写好如下配置:

 

 

<!-- 要用的数据库的访问操作,即要开启事务来处理业务时,下面的transactionManager就必须配置,而若只用spring那么可以直接配下一个"启动spring注解功能 " -->
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>

	<!--启动spring注解功能-->
	<tx:annotation-driven transaction-manager="transactionManager"
		proxy-target-class="true" />
 

在要用到事务的地方(也就是工进行数据库的操作地方)加入开启事务支持:@Transactional

这样做后,我们就可以直接使用数据库操作,而不用我们自己手工开关事务了。

 

HibernateDaoSupport也是由spring提供给Hibernate的对数据访问的工具类,

该类主要提供了两个方法: 

public final HibernateTemplate getHibernateTemplate() 
public final void setSessionFactory(SessionFactory sessionFactory) 

 
其中,setSessionFactory方法接收来自Spring的applicationContext的依赖注入,接收了配置在Spring中的SessionFactory实例,getHibernateTemplate方法用来利用刚才的SessionFactory生成Session,再生成HibernateTemplate来完成数据库的访问。 

典型的继承HibernateDaoSupport的DAO代码如下:

public class UserDAOImpl extends HibernateDaoSupport implements UserDAO{ 
public void save(Users transientInstance) { 
log.debug("saving Users instance"); 
try { 
getHibernateTemplate().save(transientInstance); 
log.debug("save successful"); 
} catch (RuntimeException re) { 
log.error("save failed", re); 
throw re; 
} 
} 
……………… 
} 

 

 
实际上,DAO的实现依然借助了HibernateTemplate的模板访问方式,只是,HibernateDaoSupport将依赖注入SessionFactory的工作已经完成,获取HibernateTemplate的工作也已经完成。注意,这种方法须在Spring的配置文件中配置SessionFactory:

<!-- 下面应该是表示使用AnnotationConfiguration配置和生成SessionFactory,并且要指明hibernate配置文件的位置 -->
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
		<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
		<property name="configLocation">
			<value>classpath:hibernate.cfg.xml</value>
		</property>
	</bean>

 
在继承HibrnateDaoSupport的DAO实现里,Hibernate Session的管理完全不需要Hibernate代码打开,而由Spring来管理。Spring会根据实际的操作,采用“每次事务打开一次session”的策略,自动提高数据库访问的性能。 

 

 

 

hibernate的事务管理请见下一篇。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics