日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Hibernate操作延遲加載的關(guān)聯(lián)

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

創(chuàng)新互聯(lián)公司主營(yíng)黟縣網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,重慶APP開(kāi)發(fā),黟縣h5成都小程序開(kāi)發(fā)搭建,黟縣網(wǎng)站營(yíng)銷(xiāo)推廣歡迎黟縣等地區(qū)企業(yè)咨詢(xún)

默認(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í)別打開(kāi))。

然而,你必須了解延遲抓取帶來(lái)的一個(gè)問(wèn)題。在一個(gè)打開(kāi)的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. tx.commit();
  8. s.close();
  9. Integer accessLevel = (Integer) permissions.get("accounts");  // Error!

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

除此之外,通過(guò)對(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)常需要使用到連接抓?。ㄋ旧砩暇褪欠茄舆t的),以代替查詢(xún)抓取。

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


分享文章:Hibernate操作延遲加載的關(guān)聯(lián)
本文URL:http://www.5511xx.com/article/djsspjo.html