求解:同一个jpa查询出来的对像会是同一个吗?
问题描述
项目中有某个方法,该方法通过jpa查询出数据库表的某条记录。修改该条记录的某个值后(没有保存),再次调用jpa查询出数据库的该条记录,发现该记录的值是修改后的值,而不是数据库里的旧值?求解出现该现像的原理?是因为两个对像是同一个内存地址指针吗?
问题出现的环境背景及自己尝试过哪些方法
jdk 8.0
对比过两个像的hashcode的值是一样的
相关代码
粘贴代码文本(请勿用截图)
--wmsLastTimeService.javapublic WmsLastTime getLastTime(int syncType) {
return wmsLastTimeDao.findFirstBySyncTypeOrderByLastTime(syncType);
}
--调用方法
WmsLastTime wmsLastTime = wmsLastTimeService.getLastTime(0); wmsLastTime.setOrderNo("1111");
WmsLastTime wmsLastTime1 = wmsLastTimeService.getLastTime(0);
wmsLastTime1.setOrderNo("2222");
你期待的结果是什么?实际看到的错误信息又是什么?
期望的结果,wmsLastTime的OrderNo是1111,wmsLastTime1的OrderNo是2222,但实际上wmsLastTime和wmsLastTime1的OrderNo都是2222
回答:
jpa不清楚有没有一级缓存的概念,但是类比mybatis的一级缓存,和你这样的结果是一样的,前提条件:一级缓存生效
第一次查询将数据结果存到cache中,即wmsLastTime存到cache中 ,第二次查询你只是wmsLastTime1指向了wmsLastTime,此时两个都是同一个对象,一改就全改了
回答:
最后解决办法是:在wmsLastTimeService中注入EntityManager来清除一级缓存 ,可确保wmsLastTime和wmsLastTime1获取到的是不同的对像
参考链接:https://blog.jonslow.com/canc...
以上是 求解:同一个jpa查询出来的对像会是同一个吗? 的全部内容, 来源链接: utcz.com/p/944624.html