精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Hibernate實踐—持久態對象的變化與入庫機制

數據庫 其他數據庫
在持久態下,任何對 userInfo? 和 userPassword? 對象的屬性的修改都將被監測到,并在適當的時候同步到數據庫中。在測試方法的最后,我們對 userPassword? 的 password? 屬性和 userInfo? 的 user_name? 屬性進行了修改。

持久化后修改屬性,會發生什么

@Test
    public void demo3(){
        UserInfo userInfo = new UserInfo();
        userInfo.user_name = "demo123";
        userInfo.user_sex = 1;
        userInfo.user_age = 18;
        UserPassword userPassword = new UserPassword();
        userPassword.password = "demo-password";
        userInfo.userPassword = userPassword;
        userPassword.UserPassword_userInfo = userInfo;
        BaseEntityUtils.save(userInfo);
        System.out.println(userInfo.user_name);
        userInfo.user_name = "demo1234";
        userPassword.password = "demo1234-password";
        UserInfo new1 = BaseEntityUtils.findById(userInfo.id,UserInfo.class);
        System.out.println(new1.user_name);
    }

在提供的代碼中,在執行 BaseEntityUtils.saveAndFlush(userInfo) 之后,userInfo 和 userPassword 對象處于持久態(Persistent State)。

userInfo 對象的狀態

  • 由于使用了 BaseEntityUtils.saveAndFlush(userInfo) 方法,userInfo 對象被保存到數據庫,并且通過 flush 操作將其狀態同步到數據庫中。
  • 因此,userInfo 對象現在處于持久態,它受到 Hibernate Session 的管理。

userPassword 對象的狀態

  • userPassword 對象與 userInfo 之間存在一對一的關聯關系,由于級聯關系的存在,userPassword 對象也被保存到數據庫中。
  • userPassword 對象的狀態也是持久態,它同樣受到 Hibernate Session 的管理。

在持久態下,任何對 userInfo 和 userPassword 對象的屬性的修改都將被監測到,并在適當的時候同步到數據庫中。在測試方法的最后,我們對 userPassword 的 password 屬性和 userInfo 的 user_name 屬性進行了修改。這些修改將在 Hibernate Session 中被跟蹤,但由于在測試方法中并沒有進行事務的提交或刷新,這些變化可能尚未同步到數據庫。如果我們想要確保變化及時更新到數據庫中,我們可以在測試方法的最后添加 BaseEntityUtils.flush() 或者使用 Spring 的 @Transactional 注解,以確保事務的正確提交和刷新。這樣,持久態下的對象變化將會及時同步到數據庫。

什么時候會刷新到數據庫

在 Hibernate 中,對于持久態的實體對象,屬性的修改會被監測到,并且會在以下情況下被同步到數據庫

事務提交時

當事務被提交時,Hibernate 會檢查事務中所有持久態對象的變化,并將這些變化同步到數據庫。這是最常見的觸發時機。

顯式調用 flush() 方法時

我們可以顯式調用 Hibernate Session 的 flush() 方法,強制將所有掛起的 SQL 語句發送到數據庫。這樣可以在事務未提交的情況下將變化同步到數據庫。

在查詢時自動執行 flush

Hibernate 在執行一些查詢操作(例如執行查詢語句之前)時,會自動執行 flush 操作,以確保最新的數據被加載。這種情況通常涉及到緩存和查詢的一致性。所以,當我們在持久態的對象上進行屬性的修改后,如果我們正在一個事務中,通常會在事務提交時或在顯式調用 flush() 方法時將變化同步到數據庫。在我們提供的測試方法中,如果沒有顯式調用 BaseEntityUtils.flush(),并且也沒有使用 Spring 的事務管理(例如,使用 @Transactional 注解),那么在測試方法執行完畢時,可能并沒有執行事務提交和 flush 操作,因此對 userInfo 和 userPassword 的屬性修改可能尚未同步到數據庫。在實際應用中,確保在需要同步變化時執行事務提交或顯式調用 flush 方法。

持久態的前提是什么

需要在同一個EntityManager中才能被自動更新到數據庫中。

持久態的前提是實體對象必須處于同一個持久化上下文(Persistence Context)中,而持久化上下文通常對應于一個 EntityManager。持久態實體對象是通過 EntityManager 進行管理和跟蹤的。具體來說,以下是實體對象變為持久態的前提條件

通過 EntityManager 進行持久化操作

持久態的實體對象通常是通過 EntityManager 的 persist、merge、find 等方法從數據庫中加載或保存得到的。在這些操作中,實體對象會被添加到 EntityManager 的持久化上下文中,從而成為持久態。

EntityManager entityManager = // 獲取 EntityManager 的方式
UserInfo userInfo = new UserInfo();
entityManager.persist(userInfo); // 將實體對象變為持久態

通過查詢操作獲取的實體對象

當通過查詢操作從數據庫中獲取實體對象時,這些對象也會成為持久態。例如,通過 find 方法獲取對象

EntityManager entityManager = // 獲取 EntityManager 的方式
UserInfo userInfo = entityManager.find(UserInfo.class, 1L); // 獲取持久態對象

在這種情況下,userInfo 對象會被添加到 EntityManager 的持久化上下文中。

級聯關系的影響

如果實體對象之間存在級聯關系,并且級聯操作的范圍包括持久化操作,那么在級聯操作中涉及到的對象也會變為持久態。

UserInfo userInfo = new UserInfo();
UserPassword userPassword = new UserPassword();
userInfo.setUserPassword(userPassword); // 設置級聯關系

在這個例子中,如果級聯關系包括 CascadeType.PERSIST,那么當 userInfo 被保存時,userPassword 也會成為持久態??傮w而言,持久態的前提是實體對象必須由 EntityManager 進行管理,且這些實體對象需要處于同一個持久化上下文中。這確保了對實體對象的任何修改都能被 EntityManager 跟蹤并在適當的時候同步到數據庫。

問題分析

@Test
    public void demo3(){
        UserInfo userInfo = new UserInfo();
        userInfo.user_name = "demo123";
        userInfo.user_sex = 1;
        userInfo.user_age = 18;
        UserPassword userPassword = new UserPassword();
        userPassword.password = "demo-password";
        userInfo.userPassword = userPassword;
        userPassword.UserPassword_userInfo = userInfo;
        BaseEntityUtils.save(userInfo);
        System.out.println(userInfo.user_name);
        userInfo.user_name = "demo1234";
        userPassword.password = "demo1234-password";
        UserInfo new1 = BaseEntityUtils.findById(userInfo.id,UserInfo.class);
        System.out.println(new1.user_name);
    }

Alt textAlt text

在上面的代碼中,由于使用的是靜態方法去save,所以查詢方法和Save方法并不是使用的一個entityManager,所以此時這兩個對象的修改沒有被同步到數據庫中,兩次打印都是demo123。

在我們提供的代碼中,確實存在使用不同的 EntityManager 的情況,導致了持久態對象的狀態在不同的 EntityManager 中不同步。具體來說,在 BaseEntityUtils.save(userInfo) 方法中使用了一個 EntityManager 對 userInfo 進行了保存,而在查詢方法 BaseEntityUtils.findById(userInfo.id, UserInfo.class) 中使用了另一個 EntityManager 進行查詢。由于每個 EntityManager 管理著自己的持久化上下文,所以在不同的 EntityManager 中,對相同的實體對象進行的修改不會同步到數據庫。這就解釋了為什么在查詢方法中打印的 new1.user_name 仍然是 "demo123"。要解決這個問題,確保在同一個 EntityManager 中進行保存和查詢操作,以保持持久態對象在相同的上下文中。

改進方案

@Test
    public void demo4(){
        UserInfo userInfo = new UserInfo();
        userInfo.user_name = "demo123";
        userInfo.user_sex = 1;
        userInfo.user_age = 18;
        UserPassword userPassword = new UserPassword();
        userPassword.password = "demo-password";
        userInfo.userPassword = userPassword;
        userPassword.UserPassword_userInfo = userInfo;
        UserInfoDomain userInfoDomain = new UserInfoDomain();
        userInfoDomain.setDomainEntity(userInfo);
        userInfoDomain.save();
        System.out.println(userInfo.user_name);
        userInfo.user_name = "demo1234";
        userPassword.password = "demo1234-password";
        userInfoDomain.flush();
        UserInfo new1 = userInfoDomain.findById(userInfo.id);
        System.out.println(new1.user_name);
    }

運行結果為:

Alt textAlt text

在UserInfoDomain中,所有的操作都在一個EntityManager里面,所以這兩次打印分別是demo123和demo1234。

在我們提供的代碼中,UserInfoDomain 類的設計確保了所有的操作都在同一個 EntityManager 中,這是非常好的實踐。由于 UserInfoDomain 中的 save() 方法內部使用的是同一個 EntityManager 進行保存操作,保證了持久態對象在相同的上下文中。以下是對我們的代碼的解釋

保存操作
UserInfoDomain userInfoDomain = new UserInfoDomain();
userInfoDomain.setDomainEntity(userInfo);
userInfoDomain.save();

在這里,userInfoDomain.save() 方法內部使用了相同的 EntityManager 進行保存操作。因此,userInfo 對象及其關聯的 userPassword 對象都處于持久態,保存到數據庫。

第一次打印
System.out.println(userInfo.user_name);

這里打印的是 userInfo 對象的 user_name 屬性,即 "demo123"。由于保存操作是在同一個 EntityManager 中執行的,所以在持久態下的 userInfo 對象的屬性是最新的。

修改操作
userInfo.user_name = "demo1234";
userPassword.password = "demo1234-password";

這里對 userInfo 對象進行了屬性的修改。

查詢操作
UserInfo new1 = userInfoDomain.findById(userInfo.id);

在這里,findById 方法內部也是使用了相同的 EntityManager 進行查詢操作。因此,獲取的 new1 對象是 userInfo 對象在數據庫中的最新狀態。

第二次打印
System.out.println(new##### user_name);

這里打印的是經過查詢操作后的 new1 對象的 user_name 屬性,即 "demo1234"。由于查詢操作也是在相同的 EntityManager 中執行的,所以能夠獲取到最新的數據庫狀態??傮w來說,通過確保在同一個 EntityManager 中進行保存和查詢操作,我們有效地維持了一致的持久化上下文,確保對象的狀態能夠正確同步到數據庫。這是良好的實踐,可以有效避免對象狀態不同步的問題。

責任編輯:武曉燕 來源: 海燕技術棧
相關推薦

2009-09-29 16:11:45

Hibernate實現

2009-09-24 15:42:44

Hibernate對象

2009-09-23 17:00:07

Hibernate持久

2024-09-12 08:49:53

2009-07-02 09:38:17

Hibernate延時

2009-09-25 14:41:15

Hibernate對象

2012-06-02 00:55:44

HibernateflushJava

2009-09-23 16:30:01

Hibernate f

2009-09-29 10:37:29

Hibernate持久

2009-09-21 17:46:34

Hibernate持久

2009-09-29 10:57:25

設置Hibernate

2014-08-07 09:48:40

2024-09-06 17:49:46

2023-10-26 11:39:54

Linux系統CPU

2017-08-16 16:20:01

Linux內核態搶占用戶態搶占

2009-06-29 08:50:20

Hibernate主鍵

2009-06-18 14:51:12

Hibernate緩存Hibernate

2009-06-17 15:43:03

Hibernate緩存

2009-06-16 14:11:36

Hibernate優點Hibernate構架

2009-09-25 17:19:28

Hibernate持久
點贊
收藏

51CTO技術棧公眾號

欧美三级电影一区二区三区| www.日本精品| 亚洲欧美在线人成swag| 亚洲精品国产一区二区精华液| 国产aⅴ精品一区二区三区黄| 天天干天天干天天| 国产精品毛片久久| 日韩精品一区二区视频| 日本不卡一区二区在线观看| 欧美另类tv| 欧美激情一区在线| 国产高清精品一区二区| 啪啪小视频网站| 午夜精品久久久久99热蜜桃导演 | 日本精品一区二区三区在线播放视频| 亚洲黄色免费视频| 成人偷拍自拍| 欧美一区二区三区免费视频| 无码无遮挡又大又爽又黄的视频| 怡红院红怡院欧美aⅴ怡春院| 国产免费观看久久| 国产在线欧美日韩| 精品毛片一区二区三区| 日本不卡的三区四区五区| 韩国视频理论视频久久| 日韩欧美国产成人精品免费| 国产精品毛片视频| 91精品久久久久久久99蜜桃| 久久久精品麻豆| 激情黄产视频在线免费观看| 亚洲精品国产精品乱码不99| 亚洲图片欧洲图片日韩av| 视频污在线观看| 国产成人精品免费在线| 成人免费视频网址| 97超碰人人草| 蜜臀va亚洲va欧美va天堂| 欧美一区二三区| www.av麻豆| 极品少妇一区二区三区| 欧美国产日韩一区二区在线观看| 日本激情视频一区二区三区| 日韩电影在线视频| 中文字幕日韩高清| 91社区视频在线观看| 国产日产精品_国产精品毛片| 精品无码久久久久久国产| 麻豆精品国产传媒av| 91麻豆精品国产91久久久久推荐资源| 91精品国产麻豆国产自产在线 | ww亚洲ww在线观看国产| 精品综合久久| 久香视频在线观看| 久久九九久久九九| 日本精品一区二区| youjizz在线播放| 欧美激情中文字幕| 在线天堂一区av电影| 天堂地址在线www| 亚洲天堂成人网| 在线观看一区二区三区三州| 蜜桃视频网站在线观看| 亚洲欧美日韩电影| 国产一区 在线播放| segui88久久综合| 大伊人狠狠躁夜夜躁av一区| 中文字幕日本最新乱码视频| av资源亚洲| 欧美色欧美亚洲另类二区| 一路向西2在线观看| 国产精品成人3p一区二区三区| 欧美一级片在线| 亚洲色偷偷色噜噜狠狠99网 | 国产福利电影一区二区三区| 成人午夜电影在线播放| 亚洲欧洲精品视频| 欧美激情综合五月色丁香| 成年人三级视频| 第四色日韩影片| 色综合久久中文字幕| www.涩涩涩| 51社区在线成人免费视频| 亚洲精品电影久久久| 免费看污片的网站| 亚洲色图插插| 2019av中文字幕| 艳妇乳肉豪妇荡乳av| 国产黑丝在线一区二区三区| 国产欧美韩日| 中文字幕在线免费| 亚洲第一狼人社区| 亚洲一区二区蜜桃| 91综合久久爱com| 伊人av综合网| 日韩精品乱码久久久久久| 日韩二区三区四区| 国产精成人品localhost| 国产特黄在线| 亚洲午夜精品网| 亚洲国产成人va在线观看麻豆| 91精品国产乱码久久久竹菊| 一本色道久久88综合日韩精品 | 麻豆视频免费在线观看| 午夜精品免费在线| 欧美亚洲一级片| 韩国一区二区三区美女美女秀| 高h调教冰块play男男双性文| 国产亚洲成aⅴ人片在线观看| 国产专区在线视频| 成人四虎影院| 日韩精品中文字| 美女视频黄免费| 日产国产欧美视频一区精品| 国产乱码一区| 四虎亚洲成人| 欧美高清你懂得| 国产熟女一区二区| 国产美女一区| 国产日韩一区欧美| 超碰最新在线| 欧美男生操女生| 法国空姐电影在线观看| 99成人免费视频| 99在线观看| av免费在线观看网址| 在线播放蜜桃麻豆| 一区二区三区在线观看国产| 国产原创精品在线| 免费视频亚洲| 高清欧美性猛交xxxx| 精品人妻一区二区三区浪潮在线| 国产精品麻豆久久久| 国产aaa一级片| 欧美日韩一区二区三区在线电影| 欧美劲爆第一页| 精品久久久久久亚洲综合网站| 国产精品欧美精品| 国产又黄又猛又粗又爽的视频| 女厕嘘嘘一区二区在线播放 | 北条麻妃国产九九精品视频| 久久精品在线免费视频| 四虎国产精品免费久久5151| 中文在线不卡视频| 一级特黄aaa| 日韩理论片在线| 亚洲一区二区在线视频观看| 91久久夜色精品国产按摩| 成人av番号网| 国产一二区在线观看| 7799精品视频| 久久久精品视频免费观看| 国产美女在线精品| 黄网站色视频免费观看| 亚洲成人黄色| 欧美激情视频网| 人妻精品无码一区二区| 精品久久香蕉国产线看观看亚洲 | 中文字幕亚洲影视| 国产99久久精品一区二区永久免费| 欧美成人综合在线| 欧美三级日韩在线| 日韩在线中文字幕视频| 国产成人在线影院 | 波多野结衣精品| 日韩av在线天堂网| 特级西西444www高清大视频| 一区视频在线播放| 国产在线观看免费播放| 在线视频精品| 色一情一乱一伦一区二区三区丨 | 久久久久欧美精品| 亚洲精美视频| 国产精伦一区二区三区| 日本欧美一二三区| 欧美日本一道| 亚洲高清一二三区| 国产精品传媒在线观看| 亚洲情趣在线观看| 亚洲调教欧美在线| 蜜桃一区二区三区四区| 乱熟女高潮一区二区在线| 欧美理论电影在线精品| 国产精品一区二区久久精品| 污的网站在线观看| h视频在线免费| 欧美一区二区在线视频| 国产午夜在线播放| 国产精品国产自产拍高清av王其| 三上悠亚 电影| 欧美亚洲三级| 国产盗摄视频在线观看| 亚洲免费观看高清完整版在线观| 国产欧美一区二区三区久久| 51精品视频| 精品国偷自产在线视频99| 亚州av在线播放| 5566中文字幕一区二区电影| 久久不卡免费视频| 综合自拍亚洲综合图不卡区| 人妻大战黑人白浆狂泄| 国产美女精品在线| 91免费黄视频| 亚洲精品va| 日韩一区国产在线观看| 国产伦精品一区二区三区在线播放| 国产精品美女av| wwwww亚洲| www日韩中文字幕在线看| 欧美精品a∨在线观看不卡| 欧美成人官网二区| 国产精品久久久久久久免费 | 国产原创中文在线观看| 亚洲视频电影在线| 亚洲精品第一区二区三区| 欧美福利在线播放网址导航| 亚洲直播在线一区| 欧美激情三区| 国产精品成人国产乱一区| 成人免费网站观看| 欧美国产第一页| 羞羞网站在线看| 久久久精品视频在线观看| 国产在线电影| 亚洲视频一区二区三区| 天堂a√在线| 亚洲国产成人久久| 成人av手机在线| 欧美一二区视频| 国产精品毛片一区视频播| 欧美三级在线视频| 亚洲 小说区 图片区| 一本久久精品一区二区| www.日本精品| 日韩欧美一区二区三区| 久久免费激情视频| 欧美日韩免费一区| www.毛片.com| 福利视频导航一区| 五月婷婷中文字幕| 欧美三级欧美成人高清www| 日韩成人免费在线观看| 亚洲成人资源在线| 久久免费公开视频| 亚洲午夜电影在线| 日本中文字幕在线免费观看| 午夜精品一区二区三区免费视频| 国产成人自拍视频在线| 欧美性猛交xxxx免费看漫画| 天天操夜夜操视频| 日本二三区不卡| 中文字幕网址在线| 在线电影国产精品| 成人黄色在线观看视频| 精品日韩成人av| 无码精品一区二区三区在线| 亚洲老头老太hd| 成人午夜影视| 久久久成人的性感天堂| 欧美xxxx做受欧美88bbw| 午夜精品美女自拍福到在线| 亚洲优女在线| 国产精品久久久久久久美男| 亚洲欧洲二区| 国产传媒一区| 一本色道久久综合狠狠躁的番外| 日韩三级电影| 亚洲精品99| 亚洲美免无码中文字幕在线| 男女精品网站| 拔插拔插华人永久免费| 国产成人精品一区二 | 国产精品成人一区二区三区夜夜夜| 国产男女猛烈无遮挡在线喷水| 一区二区在线观看免费| 国产高潮久久久| 欧美男男青年gay1069videost| 精品乱子伦一区二区| 亚洲欧美一区二区精品久久久| 色多多视频在线观看| 久久久久久久一区二区| 欧美不卡高清一区二区三区| 91青草视频久久| 天海翼精品一区二区三区| 亚洲欧美久久久久一区二区三区| 欧美日韩精品| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 国产在线麻豆精品观看| 人妻丰满熟妇av无码久久洗澡| 国产精品无人区| 国产成人亚洲精品自产在线| 欧美日韩中文字幕一区| 亚洲免费成人网| 国产一区二区三区在线观看网站| av激情在线| 国产精品高清免费在线观看| 6080亚洲理论片在线观看| 日韩亚洲视频在线| 国产亚洲高清视频| 日韩av福利在线观看| 久久免费视频色| 久久久久久免费观看| 欧美在线播放高清精品| 日韩中文字幕免费观看| 久久天天躁狠狠躁夜夜躁| 欧亚一区二区| 精品一区久久久久久| 国产伊人精品| 欧美激情第一区| 国产精品久久久久一区二区三区| 99热只有这里有精品| 欧美刺激脚交jootjob| 色影院视频在线| 国产精品av电影| 欧美aaaaa级| 欧美这里只有精品| 国产精品夜夜嗨| 久久福利免费视频| 欧美视频一区二| 国产主播福利在线| 欧美亚洲另类激情另类| 国产精品115| 日韩精品一区二区免费| 国产一区二区三区四| 亚洲综合图片一区| 欧美丝袜丝交足nylons| 九一国产在线| 日韩av黄色在线观看| 日本欧美高清| 久久精品免费一区二区| 91麻豆成人久久精品二区三区| 精品视频在线观看免费| 欧美一区二区视频在线观看| 麻豆影视在线观看_| 国产欧美一区二区三区久久| 97欧美在线视频| 欧美在线aaa| 国产精品热久久久久夜色精品三区| 黄瓜视频在线免费观看| 亚洲欧美激情精品一区二区| 成人性生活视频| 欧美精品一区二区三区在线四季 | 91gao视频| 伊人色**天天综合婷婷| 毛毛毛毛毛毛毛片123| 亚洲视频小说图片| 精品人妻无码一区二区| 欧美日韩国产第一页| 极品束缚调教一区二区网站| 免费国产a级片| 久久色中文字幕| 精品久久久久久久久久久久久久久久久久| 亚洲精品一区二区三区婷婷月 | 亚洲日本国产| 熟女俱乐部一区二区| 欧美亚洲国产一区二区三区va| 中文字幕在线免费| 亚洲一区中文字幕| 伊人久久成人| 免费福利视频网站| 69成人精品免费视频| 蜜乳av一区| 欧美久久久久久一卡四| 日韩国产欧美在线观看| 久久人妻无码aⅴ毛片a片app| 欧美一区二区不卡视频| 国产盗摄一区二区| 欧美日韩系列| 狠狠色综合播放一区二区| 青娱乐国产在线| 亚洲精品美女在线| 本网站久久精品| 久青草视频在线播放| 久久久久99精品国产片| 亚洲自拍偷拍另类| 久久久久一本一区二区青青蜜月| 亚洲ab电影| 久久精品无码一区二区三区毛片 | 欧美精品18videosex性欧美| 伊人久久大香线蕉综合网站| 999久久久精品视频| 亚洲aaa精品| 午夜看片在线免费| 国产精品果冻传媒潘| 免费久久99精品国产自在现线| 日韩精品一区二区三区在线视频| 亚洲精品在线网站| 久久久久久久性潮| 无码专区aaaaaa免费视频| 中文一区一区三区高中清不卡| 国产福利资源在线| 91高清视频在线免费观看| 久久亚洲国产| 日本少妇色视频| 日韩一区二区三区电影| 亚洲成人人体| 国产96在线 | 亚洲| 国产精品久线观看视频| 外国精品视频在线观看| 国产在线精品成人一区二区三区| 亚洲一区日韩在线|