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

来源:互联网 发布:gta5小丑捏脸数据 编辑:程序博客网 时间:2024/05/16 12:57
导读:
  问题描述:
  在进行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

原创粉丝点击