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

教你如何在Hibernate中實(shí)例化集合和代理

開(kāi)發(fā) 后端
Hibernate實(shí)例化集合和代理在Session范圍之外訪問(wèn)未初始化的集合或代理,Hibernate將會(huì)拋出LazyInitializationException異常。

本文向大家介紹Hibernate中實(shí)例化集合和代理,可能好多人還不了解Hibernate中實(shí)例化集合和代理,沒(méi)有關(guān)系,看完本文你肯定有不少收獲,希望本文能教會(huì)你更多東西。

Hibernate中實(shí)例化集合和代理在Session范圍之外訪問(wèn)未初始化的集合或代理,Hibernate將會(huì)拋出LazyInitializationException異常。 也就是說(shuō),在分離狀態(tài)下,訪問(wèn)一個(gè)實(shí)體所擁有的集合,或者訪問(wèn)其指向代理的屬性時(shí),會(huì)引發(fā)此異常。

有時(shí)候我們需要保證某個(gè)代理或者集合在Session關(guān)閉前就已經(jīng)被初始化了。 當(dāng)然,我們可以通過(guò)強(qiáng)行調(diào)用cat.getSex()或者cat.getKittens().size()之類的方法來(lái)確保這一點(diǎn)。 但是這樣的程序會(huì)造成讀者的疑惑,也不符合通常的代碼規(guī)范。

靜態(tài)方法Hibernate.initialized() 為你的應(yīng)用程序提供了一個(gè)便捷的途徑來(lái)延遲加載集合或代理。 只要它的Session處于open狀態(tài),Hibernate.initialize(cat) 將會(huì)為cat強(qiáng)制對(duì)代理實(shí)例化。 同樣,Hibernate.initialize( cat.getKittens() ) 對(duì)kittens的集合具有同樣的功能。

還有另外一種選擇,就是保持Session一直處于open狀態(tài),直到所有需要的集合或代理都被載入。 在某些應(yīng)用架構(gòu)中,特別是對(duì)于那些使用Hibernate進(jìn)行數(shù)據(jù)訪問(wèn)的代碼,以及那些在不同應(yīng)用層和不同物理進(jìn)程中使用Hibernate的代碼。 在集合實(shí)例化時(shí),如何保證Session處于open狀態(tài)經(jīng)常會(huì)是一個(gè)問(wèn)題。有兩種方法可以解決此問(wèn)題:

在一個(gè)基于Web的應(yīng)用中,可以利用servlet過(guò)濾器(filter),在用戶請(qǐng)求(request)結(jié)束、頁(yè)面生成 結(jié)束時(shí)關(guān)閉Session(這里使用了在展示層保持打開(kāi)Session模式(Open Session in View)), 當(dāng)然,這將依賴于應(yīng)用框架中異常需要被正確的處理。

在返回界面給用戶之前,乃至在生成界面過(guò)程中發(fā)生異常的情況下, 正確關(guān)閉Session和結(jié)束事務(wù)將是非常重要的, 請(qǐng)參見(jiàn)Hibernate wiki上的"Open Session in View"模式,你可以找到示例。

在一個(gè)擁有單獨(dú)業(yè)務(wù)層的應(yīng)用中,業(yè)務(wù)層必須在返回之前,為web層“準(zhǔn)備”好其所需的數(shù)據(jù)集合。這就意味著 業(yè)務(wù)層應(yīng)該載入所有表現(xiàn)層/web層所需的數(shù)據(jù),并將這些已實(shí)例化完畢的數(shù)據(jù)返回。

通常,應(yīng)用程序應(yīng)該 為web層所需的每個(gè)集合調(diào)用Hibernate.initialize()(這個(gè)調(diào)用必須發(fā)生咱session關(guān)閉之前); 或者使用帶有FETCH從句,或FetchMode.JOIN的Hibernate查詢, 事先取得所有的數(shù)據(jù)集合。

如果你在應(yīng)用中使用了Command模式,代替Session Facade , 那么這項(xiàng)任務(wù)將會(huì)變得簡(jiǎn)單的多。

你也可以通過(guò)merge()或lock()方法,在訪問(wèn)未實(shí)例化的集合(或代理)之前, 為先前載入的對(duì)象綁定一個(gè)新的Session。

顯然,Hibernate將不會(huì),也不應(yīng)該自動(dòng)完成這些任務(wù),因?yàn)檫@將引入一個(gè)特殊的事務(wù)語(yǔ)義。

有時(shí)候,你并不需要完全實(shí)例化整個(gè)大的集合,僅需要了解它的部分信息(例如其大小)、或者集合的部分內(nèi)容。

你可以使用集合過(guò)濾器得到其集合的大小,而不必實(shí)例化整個(gè)集合:

  1. ( (Integer) s.createFilter( collection, "select count(*)" ).list().get(0) ).intValue() 

這里的createFilter()方法也可以被用來(lái)有效的抓取集合的部分內(nèi)容,而無(wú)需實(shí)例化整個(gè)集合:

  1. s.createFilter( lazyCollection, "").setFirstResult(0).setMaxResults(10).list(); 

【編輯推薦】

  1. 對(duì)Hibernate一級(jí)緩存與二級(jí)緩存的解析
  2. Hibernate傳播性持久化攻略
  3. 深入了解Hibernate自動(dòng)狀態(tài)檢測(cè)
  4. 簡(jiǎn)單學(xué)會(huì)Hibernate對(duì)象持久化
  5. 分析Hibernate自增主鍵
責(zé)任編輯:仲衡 來(lái)源: 博客園
相關(guān)推薦

2009-09-23 13:04:58

HibernateOracle sequ

2022-04-27 08:55:01

Spring外部化配置

2010-07-02 10:18:23

ucd-snmpMIB

2011-08-10 09:31:41

Hibernateunion

2009-07-28 08:39:56

Linux應(yīng)用軟件Linux應(yīng)用

2009-09-25 11:14:16

Hibernate批量

2021-04-04 22:56:47

Linux循環(huán)用戶

2022-11-28 08:23:14

IDEAGradle配置

2011-08-31 13:08:31

winXPwin7創(chuàng)建還原點(diǎn)

2009-09-23 10:14:22

Hibernate

2009-09-23 08:56:18

Hibernate cHibernate i

2009-09-23 17:05:52

Hibernate S

2009-09-27 16:21:22

Hibernate C

2020-12-15 09:26:20

LinuxVLAN命令

2009-11-13 14:19:06

ADO.NET事務(wù)

2009-09-25 16:57:49

Hibernate查詢

2022-04-22 09:20:06

FreeBSD 13MySQL數(shù)據(jù)庫(kù)

2021-08-31 08:01:40

STM32DSP指令

2023-09-21 10:46:42

CIOCMO

2009-05-26 10:54:47

IT培訓(xùn)IT行業(yè)培訓(xùn)行業(yè)
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 久久精品国产久精国产 | 精久久久| 四虎影院久久 | 网站国产 | 97精品一区二区 | 91视频a| 国产精品国产精品国产专区不卡 | 成人在线观看亚洲 | 欧洲一级毛片 | 日韩在线观看中文字幕 | 日本三级黄视频 | 久久久久久国产精品免费免费狐狸 | 久久合久久 | 欧美日韩综合 | 亚洲视频免费播放 | 日韩三级电影在线看 | 久久精品欧美一区二区三区不卡 | 久久99精品国产 | 久久精品一区二区视频 | 91麻豆精品国产91久久久久久 | 日韩一级免费看 | 国产精品91久久久久久 | 欧美4p| 天堂综合网久久 | 亚洲日本欧美 | 日韩一区二区在线视频 | 福利在线看 | 超碰电影| 中文字幕一页二页 | 在线观看成人精品 | 免费毛片www com cn | 羞羞的视频在线看 | 综合五月 | 成人一级毛片 | 天天夜干 | 亚洲高清在线视频 | 国产在线精品一区二区 | 麻豆av一区二区三区久久 | 在线免费观看黄a | 亚洲精品一区二区三区四区高清 | 男女羞羞视频大全 |