關於hibernate查詢後的物件,set後,更新資料庫的原因
關於hibernate查詢後的物件,set後,更新資料庫的原因
2018年03月29日 20:18:49 夜影鬼手 閱讀數:370更多
個人分類: hibernate
版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/shizy102493957/article/details/79748372
Hibernate的get和load方法查詢出的實體都是持久化物件,拿到該物件後,如果你呼叫了該物件的set方法,那麼在事務遞交的時候,Hibernate會把你設定的值自動更新到資料庫中。
解決辦法:
在獲取實體物件後,呼叫下getHibernateTemplate().evict(entity)方法,該方法的作用是把持久化物件變成託管狀態。變成託管狀態後,Hibernate就不會再去自動更新該實體。
Hibernate的幾種實體狀態:
1.瞬態:
一個實體通過new操作符建立後,沒有和Hibernate的Session建立關係,也沒有手動賦值過該實體的持久化標識(持久化標識可以認為是對映表的主鍵)。
此時該實體中任何屬性的更新都不會反映到資料庫表中。
2.持久化:
當一個實體和Hibernate的Session建立了關係,並獲取了持久化標識,而且在Hibernate的Session生命週期記憶體在。
此時針對該實體任何屬性的更改都會直接影響到資料庫表中一條記錄對應欄位的更新,即與資料庫表同步。
3.脫管:
當一個實體和Hibernate的Session建立了關係,並獲取了持久化標識,而此時Hibernate的Session生命週期結束,實體的持久化標識沒有被改動過。
針對該實體任何屬性的修改都不會及時反映到資料庫表中。
關閉session可以使實體從持久化狀態轉為託管狀態。