spring jpa中update遇到的坑
使用jpa 自己編寫update語句,
遇到問題:
1.在同一個service事物中,先執行保存,在執行更新,緊接著執行查詢--查詢結果為更新前的結果。
2.執行自定義update方法結束后執行查詢查出結果依然為update前的結果集
解決問題所在:
自定義update并未清空實體緩存。注解@Modifying加參數eg:@Modifying(clearAutomatically = true)
jpa更新問題記錄
使用jpa 去更新:
1
|
@Modifying (clearAutomatically = true ), @Transactional |
它說的是可以清除底層持久化上下文,就是entityManager這個類,我們知道jpa底層實現會有二級緩存,也就是在更新完數據庫后,如果后面去用這個對象,你再去查這個對象,這個對象是在一級緩存,但是并沒有跟數據庫同步,這個時候用clearAutomatically=true,就會刷新hibernate的一級緩存了, 不然你在同一接口中,更新一個對象,接著查詢這個對象,那么你查出來的這個對象還是之前的沒有更新之前的狀態。
注意:
如果說在同個事務方法中,如果有多個更新操作,使用@Modifying(clearAutomatically = true),就會產生在此之前的update操作全部失效,因為把jpa的一級緩存都刷新掉了
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/lyp131422/article/details/89962111