成人免费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技術棧公眾號

主站蜘蛛池模板: 久久国产精品精品 | 国产目拍亚洲精品99久久精品 | 成人一区二区视频 | 精品免费视频一区二区 | 亚洲一区在线播放 | av中文字幕在线 | 亚洲 欧美 日韩在线 | 色约约视频 | 国产玖玖 | 97精品久久| 成人亚洲网 | 亚洲一级av毛片 | 一区二区在线免费播放 | 黄色一级大片在线观看 | 精品久久久久久久久久久 | 亚洲视频一区在线观看 | 久久久美女 | 久久99视频这里只有精品 | 一区二区三区久久久 | 色先锋影音 | 精品91久久| 久久久亚洲成人 | 国产福利一区二区 | 日韩成人在线播放 | 福利视频一区二区 | 亚洲日本三级 | 亚洲人久久 | www久久国产 | 亚洲国产视频一区二区 | 免费国产视频在线观看 | 午夜在线小视频 | 欧美三级视频 | 欧美精品久久久久久久久久 | 日本网站免费在线观看 | 欧洲av一区 | 午夜免费av | 免费视频久久久久 | 日韩精品一区二区三区在线播放 | 91精品国产色综合久久不卡蜜臀 | 欧美一区二区三区在线播放 | 国产精品国产精品国产专区不片 |