Hibernate查詢自動更新

2021-09-13 12:28:38 字數 958 閱讀 6316

最近在處理乙個新需求問題,**的大致邏輯是獲取乙個實體物件,呼叫該物件的set方法設定其中的某些字段,然後把修改後的實體作為

引數供其他地方呼叫,根據返回值來決定是否更新這個實體到資料庫中。按照這個思路呼叫了系統中的getbyid方法,結果測試的時候發

現,不管返回值是什麼,這個實體最終都被更新到資料庫中了。好吧,這明顯是有問題的...

檢視日誌資訊後發現,系統總是會列印出乙個update語句。說明系統的確是執行了更新操作的,但是我並沒有呼叫任何和update相關的方

法。跟蹤**發現,getbyid方法其實是呼叫了hibernate的get方法。嗯,果然,問題出在這裡了.....hibernate的get和load方法查詢出

的實體都是持久化物件,拿到該物件後,如果你呼叫了該物件的set方法,那麼在事務遞交的時候,hibernate會把你設定的值自動更新到資料庫中。

hibernate的幾種實體狀態:

1.瞬態:

乙個實體通過new操作符建立後,沒有和hibernate的session建立關係,也沒有手動賦值過該實體的持久化標識(持久化標識可以認為是對映表

的主鍵)。此時該實體中任何屬性的更新都不會反映到資料庫表中。

2.持久化:

當乙個實體和hibernate的session建立了關係,並獲取了持久化標識,而且在hibernate的session生命週期內存在。此時針對該實體任何

屬性的更改都會直接影響到資料庫表中一條記錄對應欄位的更新,即與資料庫表同步。

3.脫管:

當乙個實體和hibernate的session建立了關係,並獲取了持久化標識,而此時hibernate的session生命週期結束,實體的持久化標識沒有被改動過。針對該實體任何屬性的修改都不會及時反映到資料庫表中。關閉session可以使實體從持久化狀態轉為託管狀態。

自動更新原理

安裝補丁的時候,客戶端的主程式一般是要關閉的,除非採用動態解除安裝 調入元件的技術,比如網路遊戲,就是盡量讓玩家邊玩遊戲邊更新。人們嫌這樣的公升級仍然太麻煩,後來出現了b s結構,大家像抓住了救命稻草一樣的追捧至今,希望能從這些勞動中解脫出來。b s結構就是瀏覽器 伺服器結構,它所有的功能,都是在瀏...

自動更新元件

一些說明 自動更新幾乎每個程式都有。而自動更新的基本方法就是 1.比較本地版本與伺服器上的版本,做出是否需要更新的判斷 配置檔案的格式如下 xml version 1.0 encoding gb2312 configmodel xmlns xsi xmlns xsd ver 2.0ver 版本號 p...

自動更新元件

一些說明 自動更新幾乎每個程式都有。而自動更新的基本方法就是 1.比較本地版本與伺服器上的版本,做出是否需要更新的判斷 配置檔案的格式如下 xml version 1.0 encoding gb2312 configmodel xmlns xsi xmlns xsd ver 2.0ver 版本號 p...