在不使用事务的情况下:
当 @Modify的clearAutomatically为true时,update语句会将所有的缓存存入数据库,并将缓存清空,当你再次执行fingbyId时,才会从数据库中读取。并放到缓存中,注意:当update更新的数据没变化时,实际上是不会将缓存写入数据库的,但是会清空缓存
而当clearAutomatically为false时,update会将所有缓存存入数据库,但是不会将缓存清空,也不会更新缓存,
而save操作既更新缓存,又更新数据库,但是如果缓存的数据跟快照的数据比起来没有改变,是不会保存的,而且这个改变的单位是指数据库表,如果单个表上的数据发生更改会保存这个表上的数据,其他表的变化不会保存这个表。
比如,两个表a,b
- save(aPO),save(bPO)--快照和缓存是一致的
- 在程序执行过程中手动改了a表上的几个数据,b表上的数据
- bPO.setXX,然后再save(aPO),save(bPO) 这时b表上在第二步上手动改的数据会被覆盖,而a不会
flush跟save类似