使用JPA查詢數據,對查詢出來的結果進行修改,但是不保存數據庫,最終數據庫卻做了同樣的修改。
解決方案:需要對修改的值重新復制到另一個對象中在進行修改。
原因:
JPA有如上所示的四個生命周期:
New:瞬時對象,尚未有id,還未和Persistence Context建立關聯的對象。
Managed:持久化受管對象,有id值,已經和Persistence Context建立了關聯的對象。
Datached:游離態離線對象,有id值,但沒有和Persistence Context建立關聯的對象。
Removed:刪除的對象,有id值,尚且和Persistence Context有關聯,但是已經准備好從數據庫中刪除
當從數據庫獲取的數據后,因為有事務管理,所以數據已與session關聯,並且數據庫有數據,已經持久化了,並且在數據庫的緩存當中了,當我們對查詢出來的數據進行修改時,緩存緩存Session中的數據發生改變,那么接着數據庫也會跟着進行相應的改變。所以就自動執行了update的更新操作。
————————————————
版權聲明:本文為CSDN博主「小甜寶」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/nanxuan1030/article/details/82986270