日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
HibernatesaveOrUpdate分析

Hibernate還是比較常用的,于是我研究了一下Hibernate saveOrUpdate,在這里拿出來和大家分享一下,希望對(duì)大家有用。

為浠水等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及浠水網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、浠水網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

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

再談?wù)凥ibernate saveOrUpdate的用場(chǎng):

Hibernate saveOrUpdate和update的區(qū)別就在于在跨Session的PO狀態(tài)管理中,Hibernate對(duì)PO采取何種策略。

例如當(dāng)你寫一個(gè)DAOImpl的時(shí)候,讓cat對(duì)象增加一個(gè)mate,如下定義:

 
 
 
  1. public void addMate(Cat cat, Mate mate) {
  2. Session session = ...;
  3. Transacton tx = ...;
  4. session.update(cat);
  5. cat.addMate(mate);
  6. tx.commit();
  7. session.close();
  8. }; 

顯然你是需要把Hibernate的操作封裝在DAO里面的,讓業(yè)務(wù)層的程序員和Web層的程序員不需要了解Hibernate,直接對(duì)DAO進(jìn)行調(diào)用。

此時(shí)問題就來了:上面的代碼運(yùn)行正確有一個(gè)必要的前提,那就是方法調(diào)用參數(shù)cat對(duì)象必須是一個(gè)已經(jīng)被持久化過的PO,也就是來說,它應(yīng)該首先從數(shù)據(jù)庫查詢出來,然后才能這樣用。但是業(yè)務(wù)層的程序員顯然不知道這種內(nèi)部的玄妙,如果他的業(yè)務(wù)是現(xiàn)在增加一個(gè)cat,然后再增加它的mate,他顯然會(huì)這樣調(diào)用,new一個(gè)cat對(duì)象出來,然后就addMate:

 
 
 
  1. Cat cat = new Cat();
  2. cat.setXXX();
  3. daoimpl.addMate(cat,mate); 

但是請(qǐng)注意看,這個(gè)cat對(duì)象只是一個(gè)VO,它沒有被持久化過,它還不是PO,它沒有資格調(diào)用addMate方法,因此調(diào)用addMate方法不會(huì)真正往數(shù)據(jù)庫里面發(fā)送update的sql,這個(gè)cat對(duì)象必須先被save到數(shù)據(jù)庫,在真正成為一個(gè)PO之后,才具備addMate的資格。

你必須這樣來操作:

 
 
 
  1. Cat cat = new Cat();
  2. cat.setXXX();
  3. daoimpl.addCat(cat);
  4. daoimpl.addMate(cat, mate); 

先持久化cat,然后才能對(duì)cat進(jìn)行其他的持久化操作。因此要求業(yè)務(wù)層的程序員必須清楚cat對(duì)象處于何種狀態(tài),到底是***種,還是第三種。如果是***種,就要先save,再addMate;如果是第三種,就直接addMate。

但是最致命的是,如果整個(gè)軟件分層很多,業(yè)務(wù)層的程序員他拿到這個(gè)cat對(duì)象也可能是上層Web應(yīng)用層傳遞過來的cat,他自己也不知道這個(gè)cat究竟是VO,沒有被持久化過,還是已經(jīng)被持久化過,那么他根本就沒有辦法寫程序了。

所以這樣的DAOImpl顯然是有問題的,它會(huì)對(duì)業(yè)務(wù)層的程序員造成很多編程上的陷阱,業(yè)務(wù)層的程序員必須深刻的了解他調(diào)用的每個(gè)DAO對(duì)PO對(duì)象進(jìn)行了何種狀態(tài)管理,必須深刻的了解他的PO對(duì)象在任何時(shí)候處于什么確切的狀態(tài),才能保證編程的正確性,顯然這是做不到的,但是有了 Hibernate saveOrUpdate,這些問題就迎刃而解了。


網(wǎng)站題目:HibernatesaveOrUpdate分析
網(wǎng)頁URL:http://www.dlmjj.cn/article/dhdecig.html