FWQ
使用JPA查询同一对象,修改值后再次查询为何会得到更新后的值?
jpa查询出的同一对象是否保持内存一致性 问题描述 在java中使用jpa查询出数据库的一条记录后,修改其值而不保存。再次调用jpa查询出同一记录时,发现该记录的值已更新为修改后的值,而非数据库中的旧值。 原因分析 上述现象源于java persistence api(jpa)的一级缓存机制。当执行第一次jpa查询时,查询结果会缓存在称为一级缓存的临时存储区域中。 subsequent查询可以直接从缓存中获取数据,而无需再访问数据库。在以下示例中,wmslasttime和wmslasttime1都指向同一缓存对象,因此修改其值将影响同一实体的不同引用。 相关代码 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");…