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

Hibernate saveOrUpdate分析

開發 后端
這里介紹Hibernate saveOrUpdate和update的區別就在于在跨Session的PO狀態管理中,Hibernate對PO采取何種策略。

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

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

再談談Hibernate saveOrUpdate的用場:

Hibernate saveOrUpdate和update的區別就在于在跨Session的PO狀態管理中,Hibernate對PO采取何種策略。

例如當你寫一個DAOImpl的時候,讓cat對象增加一個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里面的,讓業務層的程序員和Web層的程序員不需要了解Hibernate,直接對DAO進行調用。

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

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

但是請注意看,這個cat對象只是一個VO,它沒有被持久化過,它還不是PO,它沒有資格調用addMate方法,因此調用addMate方法不會真正往數據庫里面發送update的sql,這個cat對象必須先被save到數據庫,在真正成為一個PO之后,才具備addMate的資格。

你必須這樣來操作:

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

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

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

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

【編輯推薦】

  1. 描述Hibernate檢查id字段
  2. Hibernate Template簡單描述
  3. Hibernate DetachedCriteria學習經驗
  4. 概述Hibernate equals()方法
  5. Hibernate使用Person對象
責任編輯:佚名 來源: IT168
相關推薦

2009-06-18 11:43:40

Hibernate uHibernate s

2009-06-26 16:33:09

saveOrUpdatHibernate

2009-06-24 08:02:15

Hibernateupdate與save

2009-09-22 11:30:57

2009-09-22 17:47:03

Hibernate s

2009-09-23 13:33:51

Hibernate屬性

2009-09-24 09:35:47

Hibernate插入

2009-09-28 15:38:12

Hibernate P

2009-09-21 18:00:49

Hibernate X

2009-09-22 14:23:37

Hibernate S

2009-09-23 10:28:16

Hibernate映像

2009-09-21 14:24:08

Hibernate3.

2009-09-24 13:12:20

Hibernate原生

2009-09-22 11:24:07

Hibernate查詢

2009-09-24 13:49:31

Hibernate自增

2009-09-25 14:04:12

Hibernate讀取

2009-09-29 10:40:26

Hibernate業務

2009-09-25 14:23:39

2009-09-28 10:39:01

Hibernate基礎

2009-09-29 16:46:01

創建Hibernate
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人精品免费视频大全最热 | 天天操天天天干 | 在线不卡一区 | 精品乱码一区二区 | 国产午夜精品一区二区 | 久久亚洲欧美日韩精品专区 | 成人性视频在线播放 | 在线观看成人 | 亚洲视频免费观看 | 国产精品精品视频 | 免费成人毛片 | 欧美精品在线观看 | 久久亚洲一区 | 中文字幕亚洲一区二区三区 | 在线免费观看欧美 | 日本精品免费 | 免费视频成人国产精品网站 | 国产乱xxav| 精品久久久一区二区 | 亚洲一区二区三区在线视频 | 欧美一区二区三区视频在线播放 | 国产yw851.c免费观看网站 | 91美女在线观看 | 综合久久综合久久 | 日韩一区二区免费视频 | 中文字幕视频在线观看 | 欧美在线观看一区二区 | 日韩成人精品一区 | 色偷偷噜噜噜亚洲男人 | 亚洲精品一区二区网址 | 成人二区| 亚洲午夜视频 | 亚洲 欧美 综合 | 欧美6一10sex性hd | 久久成人国产精品 | 国产精品亚洲综合 | 在线免费观看毛片 | 国产成人免费视频 | 一二三四av | 日本在线免费视频 | 福利国产|