@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 )
}