hibernate session 过滤器控制
最近做一个公司项目的Demo,使用技术为jsp+dwr+hibernate,因为该Demo中所用的表多,有一对一,一对多和多对一的关系,所以利用hibernate的延迟加载(lazy="true")对性能的提高相当重要,但随之带来的session管理更为重要,弄不好常出现延迟加载异常,在这里我利用了Filter 来处理session的close的,相关代码如下:
?
1.HibernateSessionFactory.java(Eclipse自动生成,通过ThreadLocal将session的非线程安全变成安全)
?HibernateSessioniFactory主要负责session的开和关。
?
2.HibernateSessionFilter(要编写的过滤器,主要处理session的关闭)
public class UserDao implements BaseDao {private static final Logger log = Logger.getLogger(UserDao.class); private Session session ; public UserDao(){ log.info("UserDao construct is running") ; session = SessionFactory.getSession() ; } @Overridepublic boolean save(Object o) {log.info("UserDao save is running ");boolean flag = false ;Transaction tran = null;try {tran = session.beginTransaction();session.save(o);tran.commit();flag = true ;} catch (Exception e) {log.error("error save user");flag = false ;if (tran != null) {try {tran.rollback();} catch (HibernateException e1) {log.error("save Transaction rollback is error "+e1.getMessage()) ;}}e.printStackTrace();}finally{//session.close() ;//这里就不需要在关闭session直接交给filter来处理}return flag ;}}??? 以上是本人的学习总结,有误之处请多多指教,希望对刚学hibernate的同志们有所帮助。
?
?
?
1 楼 ariyue 2008-11-07 高手,学习中!