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