成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Hibernate update全面講解

開發(fā) 后端
這里介紹Hibernate update()和saveOrUpdate()是用來對(duì)跨Session的PO進(jìn)行狀態(tài)管理的。假設(shè)你的PO不需要跨Session的話,那么就不需要用到。

在向大家詳細(xì)介紹Hibernate update之前,首先讓大家了解下在Hibernate中,最核心的概念就是對(duì)PO的狀態(tài)管理,然后全面介紹Hibernate update。

在Hibernate中,最核心的概念就是對(duì)PO的狀態(tài)管理。一個(gè)PO有三種狀態(tài):
1、未被持久化的VO,此時(shí)就是一個(gè)內(nèi)存對(duì)象VO,由JVM管理生命周期
2、已被持久化的PO,并且在Session生命周期內(nèi),此時(shí)映射數(shù)據(jù)庫數(shù)據(jù),由數(shù)據(jù)庫管理生命周期
3、曾被持久化過,但現(xiàn)在和Session已經(jīng)detached(分離的)了,以VO的身份在運(yùn)行,這種和Session已經(jīng)detached的PO還能夠進(jìn)入另一個(gè)Session,繼續(xù)進(jìn)行PO狀態(tài)管理,此時(shí)它就成為PO的第二種狀態(tài)了。這種PO實(shí)際上是跨了Session進(jìn)行了狀態(tài)維護(hù)的。

Hibernate update()和saveOrUpdate()是用來對(duì)跨Session的PO進(jìn)行狀態(tài)管理的。假設(shè)你的PO不需要跨Session的話,那么就不需要用到,例如你打開一個(gè)Session,對(duì)PO進(jìn)行操作,然后關(guān)閉,之后這個(gè)PO你也不會(huì)再用到了,那么就不需要用update()。

因此,我們來看看:

  1. Foo foo=sess.load(Foo.class,id);  
  2. foo.setXXX(xxx);  
  3. sess.flush();  
  4. sess.commit();  

PO對(duì)象foo的操作都在一個(gè)Session生命周期內(nèi)完成,因此不需要顯式的進(jìn)行sess.update(foo)這樣的操作。 Hibernate會(huì)自動(dòng)監(jiān)測(cè)到foo對(duì)象已經(jīng)被修改過,因此就向數(shù)據(jù)庫發(fā)送一個(gè)update的sql。當(dāng)然如果你非要加上sess.update (foo)也不會(huì)錯(cuò),只不過這樣做沒有任何必要。

而跨Session的意思就是說這個(gè)PO對(duì)象在Session關(guān)閉之后,你還把它當(dāng)做一個(gè)VO來用,后來你在Session外面又修改了它的屬性,然后你又想打開一個(gè)Session,把VO的屬性修改保存到數(shù)據(jù)庫里面,那么你就需要用Hibernate update了。

  1. // in the first session  
  2. Cat cat = (Cat) firstSession.load(Cat.class, catId);  
  3. Cat potentialMate = new Cat();  
  4. firstSession.save(potentialMate);  
  5.  
  6. // in a higher tier of the application  
  7. cat.setMate(potentialMate);  
  8.  
  9. // later, in a new session  
  10. secondSession.update(cat); // update cat  
  11. secondSession.update(mate); // update mate  

cat和mate對(duì)象是在***個(gè)session中取得的,在***個(gè)session關(guān)閉之后,他們就成了PO的第三種狀態(tài),和Session已經(jīng) detached的PO,此時(shí)他們的狀態(tài)信息仍然被保留下來了。當(dāng)他們進(jìn)入第二個(gè)session之后,立刻就可以進(jìn)行狀態(tài)的更新。但是由于對(duì)cat的修改操作:cat.setMate(potentialMate); 是在Session外面進(jìn)行的,Hibernate不可能知道cat對(duì)象已經(jīng)被改過了,第二個(gè)Session并不知道這種修改,因此一定要顯式的調(diào)用 secondSession.update(cat); 通知Hibernate,cat對(duì)象已經(jīng)修改了,你必須發(fā)送update的sql了。

所以Hibernate update的作用就在于此,它只會(huì)被用于當(dāng)一個(gè)PO對(duì)象跨Session進(jìn)行狀態(tài)同步的時(shí)候才需要寫。而一個(gè)PO對(duì)象當(dāng)它不需要跨Session進(jìn)行狀態(tài)管理的時(shí)候,是不需要寫update的。

【編輯推薦】

  1. 描述Hibernate檢查id字段
  2. Hibernate Template簡(jiǎn)單描述
  3. Hibernate DetachedCriteria學(xué)習(xí)經(jīng)驗(yàn)
  4. 概述Hibernate equals()方法
  5. Hibernate使用Person對(duì)象
責(zé)任編輯:佚名 來源: 博客園
相關(guān)推薦

2009-09-24 10:50:31

Hibernate主鍵

2009-09-29 10:12:03

Hibernate A

2009-09-24 11:04:56

Hibernate二級(jí)

2009-09-21 13:05:18

Hibernate u

2009-09-29 17:11:23

Hibernate T

2009-06-18 11:43:40

Hibernate uHibernate s

2009-09-21 16:56:14

Hibernateibatis

2009-09-28 13:49:44

Hibernate Q

2009-09-28 17:27:27

Hibernate A

2009-09-25 16:27:33

Hibernate S

2009-09-28 16:54:34

Hibernate示例

2009-09-29 14:03:14

Hibernate數(shù)據(jù)

2009-09-24 18:11:56

Hibernate q

2009-09-28 11:30:53

Hibernate核心

2009-09-25 16:08:12

Hibernate f

2009-09-23 17:41:05

Hibernate事務(wù)

2009-09-25 09:46:03

Hibernate s

2009-09-28 10:24:58

Hibernate基礎(chǔ)

2009-09-22 11:24:07

Hibernate查詢

2009-09-22 15:22:08

Hibernate性能
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产不卡一区在线观看 | 成人亚洲精品久久久久软件 | 婷婷色在线播放 | 日本a∨精品中文字幕在线 亚洲91视频 | 久久精品欧美一区二区三区不卡 | 国内精品久久久久久 | 国产一级久久久久 | 色婷婷综合久久久久中文一区二区 | 一区二区三区精品视频 | 伊人网在线播放 | 国产高清不卡 | 91福利电影在线观看 | 免费在线观看黄网站 | 99热在线免费 | 欧洲成人午夜免费大片 | 国产美女一区二区 | 综合久久一区 | 亚洲精品在线看 | 狠狠久久综合 | 99热精品在线观看 | 99国内精品 | 最近中文字幕在线视频1 | 亚洲精品99| 国产精品自产拍 | 五月天婷婷激情 | 久久伦理电影 | 国产精品国产 | 亚洲一区电影 | 少妇精品久久久久久久久久 | 免费观看一级黄色录像 | 日本欧美大片 | 成人精品一区二区 | 国产精品久久午夜夜伦鲁鲁 | 日韩一级在线 | 久久久久久91香蕉国产 | 成人h动漫精品一区二区器材 | 爱草在线 | 性福视频在线观看 | 国产电影一区二区在线观看 | 中文在线亚洲 | 九九热最新视频 |