潮生明月 2015-03-18 14:24 采纳率: 0%
浏览 1718
已采纳

Hibernate 有关get和load的差别

    为什么这个会报错
    Session s = sessionFactory.getCurrentSession();
    s.beginTransaction();
    User u = (User)s.load(User.class, 1);
    s.getTransaction().commit();
    u.setName("a");


    而为什么这个可以
    Session s = sessionFactory.getCurrentSession();
    s.beginTransaction();
    User u = (User)s.get(User.class, 1);
    s.getTransaction().commit();
    u.setName("a");
  • 写回答

2条回答 默认 最新

  • just-go 2015-03-19 13:46
    关注

    load方法去查询的时候是在你要用到代理对象的数据的时候才去发送sql到数据库查数据,单是你在set的之前就commit了,把session关闭了,所以后面会报错,报错的类型是懒加载错误,而get的时候,是马上发起sql去查询数据放在对象中,对象已经存在了,所以你set的时候就不会报错!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?