勤勤勤能补拙 2018-01-29 08:36 采纳率: 50%
浏览 3048
已结题

Hibernate中的Session应该在何处关闭?

我了解到的是有两种方法,但我觉得有一种并不是很靠谱。
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,麻烦大家帮我解答一下,我纠结了很久。。。
  • 写回答

8条回答 默认 最新

  • Odyssey_May 2018-01-29 08:53
    关注

    第一种是需要手动关闭,第二种就是不用你手动关闭,当这个事务结束后会自动关闭,比较方便。
    而spring框架你可以当做一个容器,像Struts、hibernate、springmvc、mybatis都是在这个框架中黏合,主要提供了IOC控制反转和AOP面向切面的功能等等

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 MATLAB动图问题
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名