@Transactional中mybatis一级缓存可能导致的问题

java的Spring注解事务,发现一个现象,记录一下:
@Transactional(rollbackFor = Exception.class)
{
Dvs dvs = service.getById(deviceId);

dvs.setProjectId(0L);
// 因为一级缓存,这里不会查表。 不执行sql,而是用dvs对象赋值dvs2. 由于dvs已经被修改,所以dvs2.projectId就成了0.
Dvs dvs2 = service.getById(deviceId);
// 此时,修改updateById还没有执行,dvs2.getProjectId 竟然 == 0;
System.out.println(dvs2.getProjectId());

service.updateById(dvs )

}

// 想要自己要的效果,需要先保存一份数据
@Transactional(rollbackFor = Exception.class)
{
Dvs dvs = service.getById(deviceId);
Dvs dvs2 = service.getById(deviceId); 或者dvs2 = dvs;
dvs.setProjectId(0L);

service.updateById(dvs )

}

posted @ 2024-10-14 17:57  梧桐将秋色  阅读(15)  评论(0编辑  收藏  举报