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

Hibernate操作延遲加載的關(guān)聯(lián)

開發(fā) 后端
Hibernate 3對(duì)集合使用Hibernate延遲select抓取,對(duì)返回單值的關(guān)聯(lián)使用延遲代理抓取。對(duì)幾乎是所有的應(yīng)用而言,其絕大多數(shù)的關(guān)聯(lián),這種策略都是有效的。

Hibernate操作延遲加載的關(guān)聯(lián)有很多值得學(xué)習(xí)的地方,這里我們主要介紹Hibernate延遲,包括介紹Hibernate延遲使用等方面。

默認(rèn)情況下,Hibernate 3對(duì)集合使用延遲select抓取,對(duì)返回單值的關(guān)聯(lián)使用延遲代理抓取。對(duì)幾乎是所有的應(yīng)用而言,其絕大多數(shù)的關(guān)聯(lián),這種策略都是有效的。

注意:假若你設(shè)置了hibernate.default_batch_fetch_size,Hibernate會(huì)對(duì)延遲加載采取批量抓取優(yōu)化措施(這種優(yōu)化也可能會(huì)在更細(xì)化的級(jí)別打開)。

然而,你必須了解延遲抓取帶來(lái)的一個(gè)問題。在一個(gè)打開的Hibernate session上下文之外調(diào)用延遲集合會(huì)導(dǎo)致一次意外。比如:

  1. s = sessions.openSession();  
  2. Transaction tx = s.beginTransaction();  
  3.               
  4. User u = (User) s.createQuery("from User u where u.name=:userName")  
  5.     .setString("userName", userName).uniqueResult();  
  6. Map permissions = u.getPermissions();  
  7.  
  8. tx.commit();  
  9. s.close();  
  10.  
  11. Integer accessLevel = (Integer) permissions.get("accounts");  // Error! 

在Session關(guān)閉后,permessions集合將是未實(shí)例化的、不再可用,因此無(wú)法正常載入其狀態(tài)。 Hibernate對(duì)脫管對(duì)象不支持延遲實(shí)例化. 這里的修改方法是:將permissions讀取數(shù)據(jù)的代碼 移到tx.commit()之前。

除此之外,通過對(duì)關(guān)聯(lián)映射指定lazy="false",我們也可以使用非延遲的集合或關(guān)聯(lián)。

但是, 對(duì)絕大部分集合來(lái)說(shuō),更推薦使用延遲方式抓取數(shù)據(jù)。如果在你的對(duì)象模型中定義了太多的非延遲關(guān)聯(lián),Hibernate最終幾乎需要在每個(gè)事務(wù)中載入整個(gè)數(shù)據(jù)庫(kù)到內(nèi)存中!

但是,另一方面,在一些特殊的事務(wù)中,我們也經(jīng)常需要使用到連接抓取(它本身上就是非延遲的),以代替查詢抓取。

這里我們就不再說(shuō)明如何具體的定制Hibernate中的抓取策略。在Hibernate3中,具體選擇哪種抓取策略的機(jī)制是和選擇單值關(guān)聯(lián)或集合關(guān)聯(lián)相一致的。

【編輯推薦】

  1. 簡(jiǎn)述Hibernate中加載并存儲(chǔ)對(duì)象
  2. Hibernate傳播性持久化攻略
  3. 深入了解Hibernate自動(dòng)狀態(tài)檢測(cè)
  4. 簡(jiǎn)單學(xué)會(huì)Hibernate對(duì)象持久化
  5. 分析Hibernate自增主鍵
責(zé)任編輯:仲衡 來(lái)源: javanb
相關(guān)推薦

2009-09-24 11:41:46

Hibernate延遲

2009-06-17 11:18:02

Hibernate延遲

2009-09-28 09:56:53

Hibernate屬性

2009-09-28 09:40:28

Hibernate集合延遲加載

2009-09-25 10:17:21

Hibernate延遲

2009-07-02 09:39:37

Hibernate延遲

2011-11-24 21:03:10

ibmdw

2009-09-28 09:35:10

Hibernate實(shí)現(xiàn)實(shí)體對(duì)象延遲加載

2012-02-03 10:54:50

HibernateJava

2009-09-25 15:34:42

Hibernate關(guān)聯(lián)

2012-08-15 11:36:13

Hibernate

2009-09-25 12:59:52

Hibernate映射

2011-06-08 14:22:51

延遲加載

2009-09-25 10:22:35

Hibernate多表

2012-06-05 10:22:45

jQuery

2022-12-02 08:00:00

JavaScriptAstro前端

2021-05-08 09:49:07

JavaScript延遲加載

2009-06-17 14:55:26

Hibernate數(shù)據(jù)

2023-06-29 07:48:35

異步加載JavaScript

2015-08-25 10:28:38

前端圖片延遲加載
點(diǎn)贊
收藏

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