使用HibernateDaoSupport进行数据操作时常用两种方式访问Session:getSession()和HibernateCallback。
总结:
getSession()在事务边界内会通过TransactionSynchronizationManager获取Session资源,同一线程内它不会重复创建Connection , 那些获取到的Session()不需要手动关闭。但是在无声明式事务环境下,它就会表现出极其坑爹的状况,它反复获取Connection,也不关闭Session。非常消耗资源
HibernateTemplate有一个安全且高效的Session环境,它的CRUD都是位于HibernateCallback内部,如果它的CRUD并没有位于事务之中,它会自己创建一个事务(Spring集成Hibernate时,所有的资源都是由TransactionSynchronizationManager管理的 )。同一个线程中它只需要一个Connection。Session也会在事务边界处自动关闭,程序员不需要关注此事(这个事务边界可能是@Transactional显式声明的也可能是HibernateTemplate#doExecute隐式声明的)。
摘自
http://www.iteye.com/topic/1113462
本文深入探讨了使用HibernateDaoSupport进行数据操作时的两种常见方式:getSession()和HibernateCallback,并对比了它们在事务管理和资源利用上的区别。重点强调了HibernateCallback的安全性和效率,以及如何在Spring集成Hibernate的场景下实现资源的有效管理。
654

被折叠的 条评论
为什么被折叠?



