摘要:問題癥狀描述最近在處理一個新需求問題,代碼的大致邏輯是獲取一個實體對象,調用該對象的方法設置其中的某些字段,然后把修改后的實體作為參數供其他地方調用,根據返回值來決定是否更新這個實體到數據庫中。
1、問題癥狀描述
最近在處理一個新需求問題,代碼的大致邏輯是獲取一個實體對象,調用該對象的set方法設置其中的某些字段,然后把修改后的實體作為 參數供其他地方調用,根據返回值來決定是否更新這個實體到數據庫中。按照這個思路調用了系統中的getByid方法,結果測試的時候發 現,不管返回值是什么,這個實體最終都被更新到數據庫中了。好吧,這明顯是有問題的...2、問題原因分析和解決辦法
查看日志信息后發現,系統總是會打印出一個update語句。說明系統的確是執行了更新操作的,但是我并沒有調用任何和update相關的方 法。跟蹤代碼發現,getById方法其實是調用了hibernate的get方法。嗯,果然,問題出在這里了.....Hibernate的get和load方法查詢出 的實體都是持久化對象,拿到該對象后,如果你調用了該對象的set方法,那么在事務遞交的時候,Hibernate會把你設置的值自動更新到數據庫中。3、相關知識擴展
Hibernate的幾種實體狀態:
1.瞬態:
一個實體通過new操作符創建后,沒有和Hibernate的Session建立關系,也沒有手動賦值過該實體的持久化標識(持久化標識可以認為是映射表
的主鍵)。此時該實體中任何屬性的更新都不會反映到數據庫表中。
2.持久化:
當一個實體和Hibernate的Session創建了關系,并獲取了持久化標識,而且在Hibernate的Session生命周期內存在。此時針對該實體任何 屬性的更改都會直接影響到數據庫表中一條記錄對應字段的更新,即與數據庫表同步。
3.脫管:
當一個實體和Hibernate的Session創建了關系,并獲取了持久化標識,而此時Hibernate的Session生命周期結束,實體的持久化標識沒有被改動過。針對該實體任何屬性的修改都不會及時反映到數據庫表中。關閉session可以使實體從持久化狀態轉為托管狀態。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76720.html
摘要:一般地我們的映射配置文件和對象是放在同一個包下的。并且映射文件的命名是有規范的。指定字符的長度默認為指定映射表的字段的類型,如果 前言 本博文主要講解介紹Hibernate框架,ORM的概念和Hibernate入門,相信你們看了就會使用Hibernate了! 什么是Hibernate框架? Hibernate是一種ORM框架,全稱為 Object_Relative DateBase-M...
摘要:的配置后在其他低版本的中也有使用這種配置的,具體根據版本而定。等注解是的相關知識,后面的文章將詳細講述。 ??在我們的實際開發的過程中,無論多復雜的業務邏輯到達持久層都回歸到了增刪改查的基本操作,可能會存在關聯多張表的復雜sql,但是對于單表的增刪改查也是不可避免的,大多數開發人員對于這個簡單而繁瑣的操作都比較煩惱。 ??為了解決這種大量枯燥的簡單數據庫操作,大致的解決該問題的有三種方...
摘要:中怎樣實現類之間的關系如一對多多對多的關系中怎樣實現類之間的關系如一對多多對多的關系它們通過配置文件中的來實現類之間的關聯關系的。 Hibernate常見面試題 Hibernate工作原理及為什么要用? Hibernate工作原理及為什么要用? 讀取并解析配置文件 讀取并解析映射信息,創建SessionFactory 打開Sesssion 創建事務Transation 持久化操作 提...
摘要:最常用的屬性,第一次加載時根據類會自動建立起表的結構前提是先建立好數據庫,以后加載時根據類自動更新表結構,即使表結構改變了但表中的行仍然存在不會刪除以前的行。 添加依賴 新建項目選擇web,JPA,MySQL三個依賴 showImg(https://segmentfault.com/img/bV2gNo?w=1684&h=1172); 對于已存在的項目可以在bulid.gradle加入...
摘要:一配置屬性詳解可以在各式各樣不同環境下工作而設計的因此存在著大量的配置參數。以簡便操作,多數配置參數都有默認的配置值也是我們日常使用的必須品。 Hibernate (開放源代碼的對象關系映射框架) Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝, 它將POJO與數據庫表建立映射關系,是一個全自動的orm框架,hibernat...
閱讀 3526·2021-09-27 13:35
閱讀 3563·2019-08-29 17:09
閱讀 2433·2019-08-26 11:30
閱讀 706·2019-08-26 10:32
閱讀 539·2019-08-26 10:23
閱讀 1200·2019-08-26 10:20
閱讀 3156·2019-08-23 15:26
閱讀 3562·2019-08-23 14:33