ppgjx 发表于 2024-8-23 22:59

@Transactional 重复查引起的问题

@Resource
    private UserDao userDao;
    @RequestMapping(value = "/test", method = RequestMethod.GET)
    @ApiOperation(value = "分页带条件查询所有数据")
    @Transactional
    public void get() {

      UserEntity userEntity = userDao.selectById("02d95ea366894d5094bc4d982196c2d8");
      userEntity.setRegion("11232");

      UserEntity userEntity1 = userDao.selectById("02d95ea366894d5094bc4d982196c2d8");
      userEntity1.setUserPhone("123");

      userDao.updateById(userEntity1);
    }


参考以上代码
在加了@Transactional 情况下userEntity 修改了RegionuserEntity1 的值Region也被修改了 这是为啥呢 这个问题我还真的没遇见过


想找一个好名字 发表于 2024-8-23 23:42

如果是mybatis的话,一般一个线程访问数据库的时候查询都会做缓存的,就比如你第一个根据id查询user的sql,他就会把查询方法名以及传入的参数等作为key,数据库返回的数据作为value放入一个map并缓存。当你第二个相同的sql来查询的时候,他并不会直接去数据库查,而是在缓存中根据你的查询方法名和传入的参数去缓存中查,如果有就直接返回了。这样可以防止频繁获取数据库连接。这是mybatis的缓存机制,你可以了解下。如果是JPA的话应该还是有相同的机制吧

wzs1998 发表于 2024-8-23 23:43

看两个实例的id,都是12939,应该是userDao查询有缓存了,两次查询指向的同一个对象
页: [1]
查看完整版本: @Transactional 重复查引起的问题