我了解到的是有两种方法,但我觉得有一种并不是很靠谱。
1.第一种是用完就关闭,但这样如何解决懒加载问题?比如我在dao中直接
public class UserDao{
public User getUser(Integer id){
session.sessionFactory.getCurrentSession();
session.beginTransaction();
User u = session.get(User.class,id);
session.beginTransaction().commit();
session.close();
return u;//用完就关闭
}
}
这样返回到service层的是代理对象,当我们要取对象里面的数据的时候就会报错,因为session已经关闭,所以这种方法是错误的吗?
2.用Filter,在到达过滤器时,getCurrentSession(),并开启事务beginTransaction,然后放行doFilter,执行结束后回到Filter 再进行 事务提交/回滚。。我觉得这种方法还是可行的。
所以上述的两种方法哪一种的可行?
另外我是刚学struts和hibernate,还不懂spring,麻烦大家帮我解答一下,我纠结了很久。。。

Hibernate中的Session应该在何处关闭?
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
8条回答 默认 最新
- Odyssey_May 2018-01-29 08:53关注
第一种是需要手动关闭,第二种就是不用你手动关闭,当这个事务结束后会自动关闭,比较方便。
而spring框架你可以当做一个容器,像Struts、hibernate、springmvc、mybatis都是在这个框架中黏合,主要提供了IOC控制反转和AOP面向切面的功能等等解决 无用评论 打赏 举报