Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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_Select_Jpa_Caching - Fatal编程技术网

Java 休眠-更新/选择后的结果相同

Java 休眠-更新/选择后的结果相同,java,hibernate,select,jpa,caching,Java,Hibernate,Select,Jpa,Caching,createQuery(“选择foo,其中id=1”) //此命令返回id为1的项。 //[断点停止]==>我进入MySQL并手动删除此项。 //[断点续集] createQuery(“选择foo,其中id=1”) //此命令也将返回id为1的项!:-( hibernateSession.flush()/hibernateSession.clean()也是如此 我想我没有很好地使用我的hibernate缓存…肯定是缓存问题。您使用的是同一个会话吗?尝试关闭该会话并从工厂获取一个新会话。肯定

createQuery(“选择foo,其中id=1”)
//此命令返回id为1的项。

//[断点停止]==>我进入MySQL并手动删除此项。
//[断点续集]

createQuery(“选择foo,其中id=1”)
//此命令也将返回id为1的项!:-(

hibernateSession.flush()/hibernateSession.clean()也是如此
我想我没有很好地使用我的hibernate缓存…

肯定是缓存问题。您使用的是同一个会话吗?尝试关闭该会话并从工厂获取一个新会话。

肯定是缓存问题。您使用的是同一个会话吗?尝试关闭该会话并从工厂获取一个新会话。

第一个查询将加载将该对象添加到hibernate会话中。 删除数据库中的行不会产生影响,因为您使用的是同一个会话


您需要启动一个新会话或从会话中启动对象。

第一个查询将该对象加载到hibernate会话中。 删除数据库中的行不会产生影响,因为您使用的是同一个会话

您需要启动一个新会话或从会话中启动对象。

试试这个

Object o = hibernateSession.createQuery("select foo where id = 1").uniqueResult();

// [BREAK POINT STOP] ==> I go in MySQL and I delete this item manualy.

hibernateSession.evict(o);
hibernateSession.createQuery("select foo where id = 1");
如果这样做有效,那么问题就出在一级缓存上。一级缓存始终存在,与给定的会话对象关联,并且独立于二级缓存(hibernate cache文档都谈到了这一点)。一级缓存的目的是满足在sa中两次获得同一数据库对象的要求在me会话中,两个引用将满足r1==r2

基本上,在可以同时修改数据库时使用hibernate并不简单。

试试这个

Object o = hibernateSession.createQuery("select foo where id = 1").uniqueResult();

// [BREAK POINT STOP] ==> I go in MySQL and I delete this item manualy.

hibernateSession.evict(o);
hibernateSession.createQuery("select foo where id = 1");
如果这样做有效,那么问题就出在一级缓存上。一级缓存始终存在,与给定的会话对象关联,并且独立于二级缓存(hibernate cache文档都谈到了这一点)。一级缓存的目的是满足在sa中两次获得同一数据库对象的要求在me会话中,两个引用将满足r1==r2

基本上,在可以同时修改数据库时使用hibernate并不简单