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

淺析Hibernate實現實體對象延遲加載

開發 后端
這里介紹Hibernate實現實體對象延遲加載,延遲加載機制是為了避免一些無謂的性能開銷而提出來的,所謂延遲加載就是當在真正需要數據的時候,才真正執行數據加載操作。

學習Hibernate時,經常會遇到實體對象延遲加載問題,這里將介紹問題的解決方法Hibernate實現實體對象延遲加載。

延遲加載機制是為了避免一些無謂的性能開銷而提出來的,所謂延遲加載就是當在真正需要數據的時候,才真正執行數據加載操作。在Hibernate中提供了對實體對象的延遲加載以及對集合的延遲加載,另外在Hibernate3中還提供了對屬性的延遲加載。下面我們就分別介紹這些種類的延遲加載的細節。

Hibernate實現實體對象延遲加載:

如果想Hibernate實現實體對象延遲加載,必須要在實體的映射配置文件中進行相應的配置,如下所示:

  1. <hibernate-mapping> 
  2. <class name=”com.neusoft.entity.User” table=”user” lazy=”true”> 
  3. ……  
  4. </class> 
  5. </hibernate-mapping> 

通過將class的lazy屬性設置為true,來開啟實體的延遲加載特性。如果我們運行下面的代碼:

  1. User user=(User)session.load(User.class,”1”);  
  2. System.out.println(user.getName()); 

當運行到第一條時,Hibernate并沒有發起對數據的查詢,如果我們此時通過一些調試工具(比如JBuilder2005的Debug工具),觀察此時user對象的內存快照,我們會驚奇的發現,此時返回的可能是 User$EnhancerByCGLIB$$bede8986類型的對象,而且其屬性為null,這是怎么回事?還記得前面我曾講過session.load()方法,會返回實體對象的代理類對象,這里所返回的對象類型就是User對象的代理類對象。在Hibernate中通過使用CGLIB,來實現動態構造一個目標對象的代理類對象,并且在代理類對象中包含目標對象的所有屬性和方法,而且所有屬性均被賦值為null。通過調試器顯示的內存快照,我們可以看出此時真正的User對象,是包含在代理對象的CGLIB$CALBACK_0.target屬性中,當代碼運行到第二條時,此時調用user.getName()方法,這時通過CGLIB賦予的回調機制,實際上調用 CGLIB$CALBACK_0.getName()方法,當調用該方法時,Hibernate會首先檢查CGLIB$CALBACK_0.target屬性是否為null,如果不為空,則調用目標對象的getName方法,如果為空,則會發起數據庫查詢,生成類似這樣的SQL語句:select * from user where id=’1’;來查詢數據,并構造目標對象,并且將它賦值到 CGLIB$CALBACK_0.target屬性中。

這樣,通過一個中間代理對象,Hibernate實現實體對象延遲加載,只有當用戶真正發起獲得實體對象屬性的動作時,才真正會發起數據庫查詢操作。所以實體的延遲加載是用通過中間代理類完成的,所以只有session.load()方法才會利用實體延遲加載,因為只有session.load()方法才會返回實體類的代理類對象。

【編輯推薦】

  1. 講解NHibernate Session
  2. 簡單描述Hibernate Sample
  3. Hibernate Annotations維護驗證邏輯
  4. Hibernate ClassValidator實例
  5. 描述Hibernate持久性類
責任編輯:佚名 來源: InfoQ
相關推薦

2009-09-24 11:41:46

Hibernate延遲

2009-09-29 16:11:45

Hibernate實現

2009-06-17 11:18:02

Hibernate延遲

2009-09-25 10:17:21

Hibernate延遲

2009-06-17 14:55:26

Hibernate數據

2009-09-28 09:56:53

Hibernate屬性

2009-09-23 13:26:10

Hibernate對象

2009-09-25 10:49:25

Hibernate加載

2009-09-25 10:47:25

Hibernate延遲

2009-09-28 09:40:28

Hibernate集合延遲加載

2011-11-24 21:03:10

ibmdw

2009-07-02 09:39:37

Hibernate延遲

2009-06-17 15:06:50

Hibernate實體

2009-09-28 17:23:51

Hibernate E

2009-07-22 11:27:36

iBATIS模糊查詢

2009-08-27 18:09:49

C#接口的實現

2009-09-24 17:28:29

Hibernate S

2009-06-17 16:00:03

Hibernate自定

2009-09-21 12:50:34

Hibernate架構

2009-09-21 18:13:11

Hibernate S
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产盗摄视频 | 免费观看www | 国产日本精品视频 | 国产精品一区二区久久久久 | 亚洲一在线 | 国产成人高清 | 女同av亚洲女人天堂 | 天堂国产| 一区中文 | 99热热99 | 欧美日韩综合一区 | 女女百合av大片一区二区三区九县 | 国产欧美在线 | 欧美一级毛片免费观看 | h片在线观看免费 | m豆传媒在线链接观看 | 成人av播放 | 精品国产欧美一区二区三区不卡 | 国产在线不卡 | 黄色网址在线免费播放 | 九九99九九精彩46 | 精品久久久久久亚洲精品 | 欧美v在线观看 | 一区二区三区不卡视频 | 99精品国产一区二区三区 | 91精品国产一区二区 | 国产精品久久久久久久久 | 男女羞羞视频免费看 | 久久久青草婷婷精品综合日韩 | 国产成人一区二区三区电影 | 亚洲人成在线观看 | 97精品久久 | 一区二区三区国产好的精 | 91精品国产综合久久久久久首页 | 久久国产精品免费一区二区三区 | 精品欧美一区二区三区久久久 | 国产精品久久久久久模特 | 欧美精品区 | 中文在线a在线 | 久久婷婷色 | 成人精品一区二区三区中文字幕 |