婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > jsp hibernate 數據保存操作的原理

jsp hibernate 數據保存操作的原理

熱門標簽:商丘百應電話機器人有沒有效果 地圖標注人員兼職 騰訊地圖標注商戶改名注冊入駐 漯河辦理400電話 電話機器人的特色和創新 開封便宜外呼系統報價 淮南騰訊地圖標注 黃石智能營銷電銷機器人效果 怎樣把地圖標注出來
數據的保存,更新和刪除:
1、Session.save()方法:
Session.save()方法用于實體對象的持久化保存,也就是說當執行session.save()方法時會生成對應的insert SQL語句,完成數據的保存。如下面的代碼:
User user=new User();
user.setName(“zx”);
Transaction tx=session.beginTransaction();
session.save(user);
tx.commit();
當執行到session.save()方法時,Hibernate并不會馬上生成insert SQL語句來進行數據的保存,而是當稍后清理session的緩存時才有可能執行insert SQL語句,那么session.save()方法到底會執行哪些步驟呢?請看進行了如下總結:
一、 在session的內部緩存中尋找保存對象,如果找到了,則認為此數據已經保存(曾經執行過insert操作),實體對象已經處于persistent狀態,直接返回。此時即使數據相比之前的狀態發生了變化,也將在事務提交時由臟數據檢查來判定是否需要執行update操作。
二、 如果實體對象實現了lifecycle接口,那么將執行待保存對象的onSave()方法。
三、 如果實體對象實現了Validatable接口,那么將會執行相應的validate()方法。
四、 如果存在攔截器對象,那么將會執行Interceptor.onSave()方法。
五、 構造insert SQL語句完成數據保存。
六、 數據保存成功后,設定實體對象的id為插入記錄的id。
七、 將保存后的實體對象納入Hibernate的內部緩存(一級緩存)。注意Hibernate不會把保存后的實體對象納入二級緩存,因為剛剛保存過的實體對象很可能在之后被修改,緩存的頻繁更新以及帶來的同步問題代價,超出了緩存該對象所帶來的收益。
八、 最后如果該對象有關聯對象,那么將會遞歸處理該級聯對象。

1、 Session.update()方法:
前面我在實體對象狀態轉化部分曾經講過,session.update()方法能夠將一個處于游離狀態的對象,重新納入Hibernate的內部緩存,變成持久化對象。如下面的代碼:
Configuration cfg = new Configuration();
SessionFactory sf=cfg. configure().buildSessionFactory();
Customer customer=new Customer(“zx”,27,images);//customer對象處于自由狀態
Session session=sf.openSession();

Transaction tx=session.beginTransaction();
session.save(customer);//保存后customer對象處于持久化狀態
session.flush();//清空緩存后customer對象處于游離狀態
tx.commit();
session.close();

Session session2=sf.openSession();
Transaction tx2=session2.beginTransaction();
session2.update(customer);//通過調用update()方法將游離狀態的customer對象,再次轉化成持久化狀態
session2.delete(customer);//調用delete()方法后,當清空緩存時,會將customer對象移出緩存,同時會在數據庫中生成delete事務,來刪除customer對象對應的數據記錄
tx.commit();
session.close();
那么這個方法到底執行了哪些步驟呢?它會按照下面的步驟進行操作:
一、 首先會在緩存中尋找需要更新的實體對象,如果找到就立刻返回,從這里我們可以看出如果對一個已經處于persistent的實體對象執行update()方法,將不會產生任何作用。
二、 然后當提交事務進行緩存清理時,將會通過臟數據檢查,確定變化的屬性,然后生成update SQL語句完成數據的更新。
這里有一個問題我們要強調一下,那就是只要通過update()方法將一個游離對象與session相關聯,那么不論這個游離的實體對象的屬性是否發生改變,都會執行update SQL語句。如下面的代碼:

Transaction tx=session.beginTransaction();
session.update(customer);
tx.commit();
session.close();
在這段代碼中并沒有修改customer對象的任何屬性值,但是也會執行一個update SQL語句,如果你希望在沒有改變實體對象屬性值的情況下不去執行update SQL語句,那么你要開啟實體對象class>元素的”select-before-update”屬性,將其設置為”true”,這個屬性默認為”false”。如下進行配置:
class name=”com.neusoft.entity.Customer” table=”customer” select-before-update=”true”>
如果啟用了這個屬性配置,那么在清理session緩存之前,會首先執行類似如下的一條SQL語句:
Select * from customer where id='1';
查詢處所有的customer實體在數據庫中對應的屬性值,然后逐條與緩存中屬性值進行比較,如果發生了改變,那么將會生成update操作進行數據更新,如果沒有發生改變那么將不會進行update操作。要跟據實際需求情況來決定是否開啟這個選項,如果實體對象的屬性不會經常發生改變,那么就應該開啟這個選項,以免執行多余的update操作。如果實體對象的屬性會經常發生改變,那么就沒必要開啟這個選項,以免在執行update操作前再執行多余的select語句。

注:(1)、當執行對一個游離實體對象執行session.update()操作時,如果在數據庫中不存在這個實體對應的紀錄,那么這個操作將會拋出異常。
(2)、當執行session.update()方法將一個游離對象與session關聯時,如果此時在緩存中已經存在了與該實體對象具有相同OID的持久化對象,那么這個方法會拋出異常。如下面代碼:
Customer customer1=new Customer(“1”,“zx”,27,images);
Session session1=sf.openSession();
Transaction tx=session1.beginTransaction();
session.save(customer1);
session.flush();
tx.commit();
session1.close();

Session session2=sf.openSession();
Transaction tx2=session2.beginTransaction();
Customer othercustomer=(Customer)session2.load(Customer.class,”1”);
session2.update(customer1)
tx2.commit();
session2.close();
當再次將游離對象customer1與session2關聯時,此時因為load()操作,在緩存已經加載了一個和customer1具有相同OID的othercustomer對象,此時由于Hibernate緩存的對象緩存機制不允許把OID相同的對象緩存,所以會拋出異常。
2、 Session.saveOrUpdate():
這個方法包含了save()方法和update()方法的特點,如果傳入該方法的是一個游離對象,那么這個方法就會執行update操作,如果傳入該方法的是一個臨時對象,那么這個方法就會執行insert操作。這個方法幕后的工作原理如下:
a) 首先在緩存尋找,如果找到待保存的操作就直接返回。
b) 如果實體實現了攔截方法,那么就執行isUnsaved()方法,判斷實體對象狀態。
c) 如果實體處于臨時狀態就執行save(),如果實體處于游離狀態那么就執行update()。
這里存在一個問題,那就是Hibernate是怎樣判斷一個實體是處于游離態還是臨時狀態的?如果實體滿足下面的一個條件,就認為這個實體處于臨時狀態。
.Java對象的OID值為null。
.如果Java對象具有version屬性(將在并發加鎖部分講解)且為null。
.如果實體的id>設置了屬性unsaved-value,而且OID值與unsaved-value值相等。
.如果實體的version屬性設置了unsaved-value,并且version屬性的值與unsaved-value值相等。
.如果實體實現了Interceptor,而且Interceptor.isUnsaved()方法返回true。
滿足這些條件中的一個,這個實體就被認為是臨時對象。
3、 Session.delete():
delete()方法用于從數據庫中刪除一個或一批實體所對應的數據,如果傳入的對象是持久化對象,么當清理緩存時,就會執行delete操作。如果傳入的是游離對象,那么首先會使該對象與session相關聯,然后當清理緩存時,再執行delete操作。看如下代碼:
Session session=sessionFactory().openSession();
Transaction tx=session.beginTransaction();
Customer customer=(Customer)session.load(Customer.class,”1”);
session.delete(customer);//計劃執行一條delete語句
tx.commit();//清理緩存,執行一條delete語句
session.close();//關閉session,這時將會把customer對象從緩存中刪除。
如果上面的代碼中的customer對象是一個游離對象,那么當執行session.delete()方法時,會首先將游離的customer對象與session相關聯,然后再清理緩存時,再執行delete操作。如果你想一次刪除多條數據,那么可以采用一個重載的delete()方法:delete(“from Customer c where c.id>'8' ”);這個方法可以刪除符合條件的所有數據。
您可能感興趣的文章:
  • JSP 開發之hibernate的hql查詢多對多查詢
  • JSP 開發之hibernate配置二級緩存的方法
  • JSP開發中hibernate框架的常用檢索方式總結
  • JSP 中Hibernate實現映射枚舉類型
  • jsp Hibernate批量更新和批量刪除處理代碼
  • jsp Hibernate入門教程
  • jsp Hibernate 函數簡介
  • jsp hibernate的分頁代碼
  • JSP開發之hibernate之單向多對一關聯的實例

標簽:鄭州 亳州 紅河 馬鞍山 岳陽 大興安嶺 武威 拉薩

巨人網絡通訊聲明:本文標題《jsp hibernate 數據保存操作的原理》,本文關鍵詞  jsp,hibernate,數據,保存,操作,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《jsp hibernate 數據保存操作的原理》相關的同類信息!
  • 本頁收集關于jsp hibernate 數據保存操作的原理的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产宾馆实践打屁股91| 久久99久久99精品免视看婷婷 | 国产精品国产三级国产普通话99| 亚洲一区二区欧美日韩| 国产一区二区三区四区在线观看 | 丁香亚洲综合激情啪啪综合| 日韩女优电影在线观看| 天堂va蜜桃一区二区三区漫画版| 欧美日韩一卡二卡三卡| 亚洲第一激情av| 欧美日韩一本到| 丝袜美腿亚洲一区| 久久亚洲欧美国产精品乐播 | 一区二区三区精品| 91福利精品第一导航| 香蕉久久一区二区不卡无毒影院| 久久久久综合网| 午夜欧美一区二区三区在线播放| 99久久精品久久久久久清纯| 日本一区二区三区电影| 成人激情动漫在线观看| 国产精品电影一区二区三区| voyeur盗摄精品| 午夜精品免费在线观看| 日韩欧美国产一区在线观看| 日本不卡123| 日韩一级成人av| 成熟亚洲日本毛茸茸凸凹| 亚洲美女免费视频| 欧美一区二区黄| 成人性生交大合| 蜜臀国产一区二区三区在线播放| 欧美日韩国产一级| 国内精品伊人久久久久av一坑| 国产精品视频线看| 欧美一级高清片| 成人精品视频一区二区三区尤物| 中文无字幕一区二区三区 | 欧美一区二区三区四区高清| 黑人巨大精品欧美一区| 91精品在线一区二区| 91色乱码一区二区三区| 精品一区二区成人精品| 一区二区三区视频在线观看| 欧美女孩性生活视频| 色狠狠一区二区| 99久久综合国产精品| 成人国产精品免费观看| 成人黄色软件下载| 成人av动漫网站| 99久久精品免费看国产 | 亚洲18色成人| 亚洲曰韩产成在线| 日韩av电影免费观看高清完整版| 亚洲综合成人在线视频| 亚洲第一福利一区| 理论片日本一区| 国产91在线观看丝袜| 成人福利电影精品一区二区在线观看| 老司机免费视频一区二区| 伦理电影国产精品| 国产精品自拍av| 色国产综合视频| 精品免费视频一区二区| 国产性色一区二区| 一区二区三区产品免费精品久久75 | 欧美日本国产视频| 久久久99精品免费观看不卡| 中文字幕一区av| 激情文学综合插| 91年精品国产| 国产亚洲美州欧州综合国| 亚洲午夜一区二区| 色综合中文字幕| 中文字幕在线观看一区| 蜜桃av噜噜一区| 国产一区中文字幕| 亚洲女同一区二区| 欧美中文字幕久久| 欧美一区二区三区四区高清| 亚洲精品成人在线| 国产91清纯白嫩初高中在线观看 | 日本乱人伦一区| 欧美自拍偷拍一区| 欧美日韩一区二区欧美激情 | www欧美成人18+| 一区免费观看视频| 韩国女主播一区| 国产欧美精品一区二区色综合朱莉 | 美女脱光内衣内裤视频久久网站| www国产精品av| 欧美高清在线视频| 午夜精品在线视频一区| 美女一区二区三区在线观看| 9久草视频在线视频精品| 91黄色激情网站| 日韩一区二区电影在线| 日韩国产一二三区| 欧美日韩成人综合| 一个色妞综合视频在线观看| av电影天堂一区二区在线观看| 欧美亚洲国产bt| |精品福利一区二区三区| 91在线国产福利| 亚洲国产欧美一区二区三区丁香婷| 国产精品久久久久久亚洲毛片| 国模冰冰炮一区二区| 久久精品视频在线看| 在线免费观看日本欧美| 久久精品国产亚洲高清剧情介绍| 日韩欧美国产精品| 欧美丰满少妇xxxbbb| 国产精品一线二线三线精华| 亚洲成a人片在线观看中文| 26uuu久久综合| 欧美久久久久久久久久| 91论坛在线播放| 91丝袜呻吟高潮美腿白嫩在线观看| 久久精品理论片| 国产精品影视网| 国产一区二区在线免费观看| 久久国产三级精品| 午夜a成v人精品| 成人免费在线视频| 日韩精品一区二区三区四区视频| 91精彩视频在线观看| 欧美午夜一区二区三区免费大片| 精品视频在线免费| 日韩一级大片在线| 亚洲美腿欧美偷拍| 18欧美亚洲精品| 亚洲欧美一区二区三区国产精品| 国产一区二区在线电影| 欧美电影在哪看比较好| 日韩一区二区麻豆国产| 久久久蜜桃精品| 香蕉久久夜色精品国产使用方法| 国产一区二区三区国产| 91视频国产观看| 精品国产伦一区二区三区免费| 久久亚洲精品小早川怜子| 中文字幕一区二区在线观看| 亚洲3atv精品一区二区三区| 激情综合色综合久久综合| 99久久免费视频.com| 欧美精品1区2区| 91传媒视频在线播放| 欧美成人性福生活免费看| 一区二区三区中文字幕在线观看| 看电影不卡的网站| 欧美三级韩国三级日本一级| 中国色在线观看另类| 国产精品自拍在线| 精品日韩成人av| 国产一区二区三区电影在线观看 | 日韩综合小视频| 99久久精品久久久久久清纯| 国产日韩欧美激情| 高清不卡在线观看| 成人免费在线视频观看| av在线综合网| 天天综合色天天| 精品久久久久久久久久久久久久久久久| 婷婷综合在线观看| 欧美美女直播网站| 国产成人精品亚洲777人妖| 欧美极品xxx| 欧美久久久久中文字幕| 国产一区二区三区四| 亚洲午夜免费视频| xnxx国产精品| 欧美精品九九99久久| 国产成人av电影在线播放| 一区二区三区四区五区视频在线观看| 欧洲中文字幕精品| 国产·精品毛片| 亚洲国产精品久久不卡毛片| 日本一区二区免费在线| 欧美日韩亚洲综合一区| 亚洲高清免费在线| 日本一区二区三级电影在线观看| 欧美日韩国产一二三| 91网站最新地址| 99视频精品全部免费在线| 亚洲6080在线| 青娱乐精品在线视频| 亚洲综合偷拍欧美一区色| 久久精品一二三| 久久综合五月天婷婷伊人| 欧美美女喷水视频| 不卡电影免费在线播放一区| 国产老肥熟一区二区三区| 亚洲国产日日夜夜| 亚洲成av人片在线观看| 亚洲国产一区二区视频| 久久成人麻豆午夜电影| 美女视频一区在线观看| 岛国一区二区三区| 亚洲妇女屁股眼交7| 日本不卡一区二区三区高清视频|