Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 会话缓存和更新/合并方法_Java_Hibernate_Session_Caching - Fatal编程技术网

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

Java 会话缓存和更新/合并方法,java,hibernate,session,caching,Java,Hibernate,Session,Caching,在诸如update()和merge()之类的博客中有很好的解释,当我们需要更新某个分离的实体时,update()和merge()方法的行为可能会有所不同。另一方面,博客指出: 一级缓存与“会话”对象关联,应用程序中的其他会话对象无法看到它。缓存对象的作用域为会话一旦会话关闭,缓存对象将永远消失。 以下是参考[]中的代码片段: 我的问题是:session和session2是两个不同的session对象。为什么update()方法在关闭对象会话时抛出一个ununiqueObjectException

在诸如update()和merge()之类的博客中有很好的解释,当我们需要更新某个分离的实体时,update()和merge()方法的行为可能会有所不同。另一方面,博客指出:

一级缓存与“会话”对象关联,应用程序中的其他会话对象无法看到它。缓存对象的作用域为会话一旦会话关闭,缓存对象将永远消失。

以下是参考[]中的代码片段:


我的问题是:
session
session2
是两个不同的
session
对象。为什么
update()
方法在关闭对象
会话时抛出一个
ununiqueObjectException
,它应该销毁对象
student
?(因此我们不可能遇到这样的异常。)

您遇到了什么样的异常?@MichielLeegwater如果有另一个实体对象具有相同的id,那么我们将得到ununiqueObjectException。这篇文章有助于理解这个问题吗?另一种预感可能是会话已关闭,但加载的对象仍认为自己已连接。要对其进行排序,对象需要分离。看见
    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();