求解:同一个jpa查询出来的对像会是同一个吗?

问题描述

项目中有某个方法,该方法通过jpa查询出数据库表的某条记录。修改该条记录的某个值后(没有保存),再次调用jpa查询出数据库的该条记录,发现该记录的值是修改后的值,而不是数据库里的旧值?求解出现该现像的原理?是因为两个对像是同一个内存地址指针吗?

问题出现的环境背景及自己尝试过哪些方法

jdk 8.0
对比过两个像的hashcode的值是一样的

相关代码

粘贴代码文本(请勿用截图)

--wmsLastTimeService.java

public 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

回到顶部