解決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)驗,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. XML入門的常見問題(三)2. HTTP協(xié)議常用的請求頭和響應(yīng)頭響應(yīng)詳解說明(學(xué)習(xí))3. 不要在HTML中濫用div4. HTML5實戰(zhàn)與剖析之觸摸事件(touchstart、touchmove和touchend)5. .NET Framework各版本(.NET2.0 3.0 3.5 4.0)區(qū)別6. XML在語音合成中的應(yīng)用7. ASP基礎(chǔ)入門第四篇(腳本變量、函數(shù)、過程和條件語句)8. jscript與vbscript 操作XML元素屬性的代碼9. php使用正則驗證密碼字段的復(fù)雜強度原理詳細(xì)講解 原創(chuàng)10. ASP將數(shù)字轉(zhuǎn)中文數(shù)字(大寫金額)的函數(shù)
