项目场景:
新接收的地址将替代旧的地址,旧的地址在正常情况下要被删除
问题描述
运行时出现ObjectOptimisticLockingFailureException
原因分析:
通过查阅资料和分析代码发现,在查找这个地址的时候我们使用了hibernate的findById()方法, 但是删除旧地址的时候我们调用了Dao的方法直接删除了数据库里的地址。因为删除的是数据库里的数据,所以hibennate二级缓存里的地址还是存在。再次根据ID查找地址的时候,仍然可以找到这个旧地址。 但是想要再次删除的时候就会报错,因为数据库里已经没有这个地址了。
解决方案:
方法一:查找的时候也直接调用Dao类的方法,保持一致性
方法二:删除数据里的地址后,使用flush方法更新缓存