会话缓存和更新/合并方法

时间:2019-07-19 16:41:06

标签: java hibernate session caching

[1]之类的博客中已经很好地解释了,如果我们需要更新某些分离的实体,则update()和merge()方法的行为可能会有所不同。另一方面,博客[2]指出:

  

一级缓存与“会话”对象关联,应用程序中的其他会话对象看不到它。缓存对象的范围是会话。 会话关闭后,缓存的对象将永远消失。

以下是参考文献[1]中的代码段:

    Session session = factory.openSession();
    Student student = (Student) session.get(Student.class, 111);
    session.close();

    student.setName("chandrashekhar");

    Session session2 = factory.openSession();
    Student student2 = session2.get(Student.class, 111); //a new Student object with id=111
    Transaction tx = session2.beginTransaction();
    session2.update(student); //throws NonUniqueObjectExcpetion because there's already *student2* in session2 cache
    tx.commit(); 

这是我的问题:sessionsession2是两个不同的Session对象。为什么update()方法会在关闭对象NonUniqueObjectExcpetion的同时抛出session的情况下本来应该毁坏对象student的原因呢? (因此我们不可能遇到这样的异常。)

0 个答案:

没有答案