hibernate查詢出的實體,set值後,自動更新到數據

 

如圖:html

故事背景:(p.s.咱們的項目沒有正確配置事務xml文件,未明緣由致使事務定義的規則不起做用)獲取一個資訊對象,調用該對象的set方法設置其中的content字段,而後把修改後的實體丟到官網首頁進行展現。結果部署到生產後發現,在進入首頁獲取資訊列表時,在調用到如圖的方法時,會直接將臨時set的content持久化到到數據庫中了。好吧,這明顯是有問題的....那麼,是什麼緣由呢?數據庫

 

答:.net

a.查看日誌信息後發現,系統老是會打印出一個update語句。說明系統的確是執行了更新操做的,可是我並無調用任何和update相關的方法。
b.跟蹤代碼發現,queryByCondition方法實際上是調用了hibernate的get方法。嗯,果真,問題出在這裏了.....
c.Hibernate的get和load方法查詢出的實體都是持久化對象,拿到該對象後,若是你調用了該對象的set方法,那麼在事務遞交的時候,Hibernate會把你設置的值自動更新到數據庫中。hibernate

 

如何解決:日誌

方案1:在獲取實體對象後,調用下getHibernateTemplate().evict(entity)方法,該方法的做用是把持久化對象變成託管狀態。變成託管狀態後,Hibernate就不會再去自動更新該實體。xml

方案2:正確配置事務。參考:https://blog.csdn.net/qq_19167629/article/details/80426625htm

 

參考:https://www.cnblogs.com/xiao-lei/p/10005625.html對象

相關文章
相關標籤/搜索