解決spring jpa中update的坑
spring jpa中update遇到的坑
使用jpa 自己編寫update語句,
遇到問題:
1.在同一個service事物中,先執(zhí)行保存,在執(zhí)行更新,緊接著執(zhí)行查詢--查詢結(jié)果為更新前的結(jié)果。
2.執(zhí)行自定義update方法結(jié)束后執(zhí)行查詢查出結(jié)果依然為update前的結(jié)果集
解決問題所在:
自定義update并未清空實體緩存。注解@Modifying加參數(shù)eg:@Modifying(clearAutomatically = true)
jpa更新問題記錄
使用jpa 去更新:
@Modifying(clearAutomatically = true),@Transactional
它說的是可以清除底層持久化上下文,就是entityManager這個類,我們知道jpa底層實現(xiàn)會有二級緩存,也就是在更新完數(shù)據(jù)庫后,如果后面去用這個對象,你再去查這個對象,這個對象是在一級緩存,但是并沒有跟數(shù)據(jù)庫同步,這個時候用clearAutomatically=true,就會刷新hibernate的一級緩存了, 不然你在同一接口中,更新一個對象,接著查詢這個對象,那么你查出來的這個對象還是之前的沒有更新之前的狀態(tài)。
注意:
如果說在同個事務(wù)方法中,如果有多個更新操作,使用@Modifying(clearAutomatically = true),就會產(chǎn)生在此之前的update操作全部失效,因為把jpa的一級緩存都刷新掉了
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
如何解決Mybatis--java.lang.IllegalArgumentException: Result Maps
這兩天因為項目需要整合spring、struts2、mybatis三大框架,但啟動的時候總出現(xiàn)這個錯誤,困擾我好久,折騰了好久終于找到問題根源,下面小編給大家分享下問題所在及解決辦法,一起看看吧2016-12-12
Java的MyBatis+Spring框架中使用數(shù)據(jù)訪問對象DAO模式的方法
Data Access Object數(shù)據(jù)訪問對象模式在Java操作數(shù)據(jù)庫部分的程序設(shè)計中經(jīng)常被使用到,這里我們就來看一下Java的MyBatis+Spring框架中使用數(shù)據(jù)訪問對象DAO模式的方法:2016-06-06
Java結(jié)合redistemplate使用分布式鎖案例講解
在Java中使用RedisTemplate結(jié)合Redis來實現(xiàn)分布式鎖是一種常見的做法,特別適用于微服務(wù)架構(gòu)或多實例部署的應(yīng)用程序中,以確保數(shù)據(jù)的一致性和避免競態(tài)條件,下面給大家分享使用Spring Boot和RedisTemplate實現(xiàn)分布式鎖的案例,感興趣的朋友一起看看吧2024-08-08
解決Callable的對象中,用@Autowired注入別的對象失敗問題
這篇文章主要介紹了解決Callable的對象中,用@Autowired注入別的對象失敗問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
淺談一下RabbitMQ、Kafka和RocketMQ消息中間件對比
這篇文章主要介紹了淺談一下RabbitMQ、Kafka和RocketMQ消息中間件對比,消息中間件屬于分布式系統(tǒng)中一個字系統(tǒng),關(guān)注于數(shù)據(jù)的發(fā)送和接收,利用高效可靠的異步信息傳遞機(jī)制對分布式系統(tǒng)中的其余各個子系統(tǒng)進(jìn)行集成,需要的朋友可以參考下2023-05-05

