JSP中的session与Hibernate的session对象同步问题。

导读:
  问题描述:
  在进行message的删除操作时,会存在信息删除后,虽然在数据库已经同步了,但在表现在层还会出现尚未操作时的页面,而且在不断的刷新过程中表现层的还不断的变化(在未操作前的形式和操作后的形式间变化)。在用hibernate控制类中用session.clear()虽然能解决问题,但是又会出在从JSP页面的session里获得相关对象时并且调用它获得与之相关联的对象时出现异常:
  org.hibernate.HibernateException: collection was evicted
  原理分析:
  因为在页面中,用的代码为:
  Member mem = (Member)session.getAttribute("user");
  Set set = mem.getSentMessages();//在这行报错
  那时因为我们在底层用了session.clear()方法已经把所有的对象清除了,但是这个对晚却还保存在JSP页面中的session里,所以我们在从JSP的session获得这个对象并不会报错,而是在我们能过他获得相关对象时报错,那里因为在JSP中的session并没有把user对象相关的对象保存在JSP的session里。
  解决方法:
  将以上代码改成:
  Member mem = (Member)session.getAttribute("user");
  mem = new MemberController().getMemberById(mem.getId().toString());
  //从控制类中根据这个对像的基本信息重新从hibernate的session里获取这个对像。
  Set set = mem.getSentMessages();
  注:public class MemberController {
  //私有变量和其它的方法
  public Member getMemberById(String id){
  return (Member)session.load(Member.class, id);
  }
  }
  Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1422436

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值