spring boot jpa 查询缓存问题? 400 报错
jpa 在一次请求过程中,查询一个对象数据出来后,做其他业务处理(这个业务逻辑需要几秒钟),这个时间可能别人修改了数据库内容(我不知道情况下)
然后我重新查询一次数据(这个时候jpa并没有查询数据库,而是使用了缓存数据,)
怎么解决这个问题,保证我在一次请求中,查询数据库都是新的数据,而不是缓存的?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
修改数据的同时也要清除缓存啊,查询数据先从缓存中查询,查询不出来进入数据库查询并写入缓存,建议看下spring cache,缓存一键式注解(类似于事务管理),同时可以和redis无缝衔接(默认ehcache)。######回复 @wad12302 : 要不然,你就要用EntityManager强制从数据库读取最新的,但是这又很无奈了。如果你一直都要求读取DB最新的数据,而你此时本地又做了修改。那你要怎么办?还不如直接把需求说出来。######并不是我修改的数据库, 我的意思是,在一次请求中,多次查询数据库,后面的查询都用了一级缓存的数据,######修改的方法上加evict,清除缓存啊######
第一,确保所有的数据操作都是通过JPA而不是别的。只有保证了这个,才能确保缓存。
第二,使用锁机制。@version从Hibernate时代就可以用来确保数据的安全。
第三,修改业务流程。确保不会出现经常交互处理同一个数据的情况。实际上现实业务中,很少有多人同时处理一条记录的情况,绝大多数都可以通过各种方法绕过去。
######如果有这种情况的需求,可以使用
entityManager.clear();