自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Hibernate update全面講解

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

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

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

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

因此,我們來看看:

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

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

而跨Session的意思就是說這個PO對象在Session關(guān)閉之后,你還把它當(dāng)做一個VO來用,后來你在Session外面又修改了它的屬性,然后你又想打開一個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對象是在***個session中取得的,在***個session關(guān)閉之后,他們就成了PO的第三種狀態(tài),和Session已經(jīng) detached的PO,此時他們的狀態(tài)信息仍然被保留下來了。當(dāng)他們進入第二個session之后,立刻就可以進行狀態(tài)的更新。但是由于對cat的修改操作:cat.setMate(potentialMate); 是在Session外面進行的,Hibernate不可能知道cat對象已經(jīng)被改過了,第二個Session并不知道這種修改,因此一定要顯式的調(diào)用 secondSession.update(cat); 通知Hibernate,cat對象已經(jīng)修改了,你必須發(fā)送update的sql了。

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

【編輯推薦】

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

2009-09-29 10:12:03

Hibernate A

2009-09-24 10:50:31

Hibernate主鍵

2009-09-24 11:04:56

Hibernate二級

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-25 09:46:03

Hibernate s

2009-09-23 17:41:05

Hibernate事務(wù)

2009-09-28 10:24:58

Hibernate基礎(chǔ)

2009-09-25 16:08:12

Hibernate f

2009-09-24 18:11:56

Hibernate q

2009-09-29 14:03:14

Hibernate數(shù)據(jù)

2009-09-28 11:30:53

Hibernate核心

2009-09-25 16:27:33

Hibernate S

2009-09-28 13:49:44

Hibernate Q

2009-09-28 16:54:34

Hibernate示例

2009-09-21 16:56:14

Hibernateibatis

2009-09-28 17:27:27

Hibernate A

2009-09-21 17:46:34

Hibernate持久

2009-09-25 17:03:29

Hibernate是什
點贊
收藏

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