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

教你如何在Hibernate中實例化集合和代理

開發 后端
Hibernate實例化集合和代理在Session范圍之外訪問未初始化的集合或代理,Hibernate將會拋出LazyInitializationException異常。

本文向大家介紹Hibernate中實例化集合和代理,可能好多人還不了解Hibernate中實例化集合和代理,沒有關系,看完本文你肯定有不少收獲,希望本文能教會你更多東西。

Hibernate中實例化集合和代理在Session范圍之外訪問未初始化的集合或代理,Hibernate將會拋出LazyInitializationException異常。 也就是說,在分離狀態下,訪問一個實體所擁有的集合,或者訪問其指向代理的屬性時,會引發此異常。

有時候我們需要保證某個代理或者集合在Session關閉前就已經被初始化了。 當然,我們可以通過強行調用cat.getSex()或者cat.getKittens().size()之類的方法來確保這一點。 但是這樣的程序會造成讀者的疑惑,也不符合通常的代碼規范。

靜態方法Hibernate.initialized() 為你的應用程序提供了一個便捷的途徑來延遲加載集合或代理。 只要它的Session處于open狀態,Hibernate.initialize(cat) 將會為cat強制對代理實例化。 同樣,Hibernate.initialize( cat.getKittens() ) 對kittens的集合具有同樣的功能。

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

在一個基于Web的應用中,可以利用servlet過濾器(filter),在用戶請求(request)結束、頁面生成 結束時關閉Session(這里使用了在展示層保持打開Session模式(Open Session in View)), 當然,這將依賴于應用框架中異常需要被正確的處理。

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

在一個擁有單獨業務層的應用中,業務層必須在返回之前,為web層“準備”好其所需的數據集合。這就意味著 業務層應該載入所有表現層/web層所需的數據,并將這些已實例化完畢的數據返回。

通常,應用程序應該 為web層所需的每個集合調用Hibernate.initialize()(這個調用必須發生咱session關閉之前); 或者使用帶有FETCH從句,或FetchMode.JOIN的Hibernate查詢, 事先取得所有的數據集合。

如果你在應用中使用了Command模式,代替Session Facade , 那么這項任務將會變得簡單的多。

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

顯然,Hibernate將不會,也不應該自動完成這些任務,因為這將引入一個特殊的事務語義。

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

你可以使用集合過濾器得到其集合的大小,而不必實例化整個集合:

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

這里的createFilter()方法也可以被用來有效的抓取集合的部分內容,而無需實例化整個集合:

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

【編輯推薦】

  1. 對Hibernate一級緩存與二級緩存的解析
  2. Hibernate傳播性持久化攻略
  3. 深入了解Hibernate自動狀態檢測
  4. 簡單學會Hibernate對象持久化
  5. 分析Hibernate自增主鍵
責任編輯:仲衡 來源: 博客園
相關推薦

2009-09-23 13:04:58

HibernateOracle sequ

2022-04-27 08:55:01

Spring外部化配置

2009-07-28 08:39:56

Linux應用軟件Linux應用

2009-09-25 11:14:16

Hibernate批量

2009-09-23 08:56:18

Hibernate cHibernate i

2011-08-10 09:31:41

Hibernateunion

2010-07-02 10:18:23

ucd-snmpMIB

2009-09-23 10:14:22

Hibernate

2009-09-23 17:05:52

Hibernate S

2009-09-27 16:21:22

Hibernate C

2009-09-25 16:57:49

Hibernate查詢

2020-12-15 09:26:20

LinuxVLAN命令

2011-08-31 13:08:31

winXPwin7創建還原點

2021-08-31 08:01:40

STM32DSP指令

2022-04-22 09:20:06

FreeBSD 13MySQL數據庫

2021-04-04 22:56:47

Linux循環用戶

2022-11-28 08:23:14

IDEAGradle配置

2014-12-16 12:54:09

BIOS虛擬化技術

2012-02-03 11:17:33

HibernateJava

2009-09-22 08:39:59

Hibernate F
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99热在这里只有精品 | 久久99精品久久久久久 | 青青草在线视频免费观看 | 国产一区二区三区 | 亚洲国产成人久久综合一区,久久久国产99 | 中文字幕视频在线观看 | 国产精品久久久久久52avav | 国产精品久久国产精品久久 | 大象一区 | 欧美日韩在线一区二区三区 | 紧缚调教一区二区三区视频 | 精品免费国产一区二区三区四区 | 一区二区在线 | 黑人巨大精品欧美黑白配亚洲 | 免费的av网站 | 亚洲一区二区三区免费视频 | 日本精品一区二区三区在线观看视频 | 美女福利视频一区 | 国产一区二区三区 | 亚洲精品福利视频 | 欧美一级片在线观看 | 亚洲国产成人精品女人久久久 | 在线观看成人 | 日本精品久久 | 美女视频一区 | 人人玩人人干 | 亚洲色片网站 | 亚洲精品久久区二区三区蜜桃臀 | 91亚洲视频在线 | 精品视频一区二区 | 美国av毛片| 欧美日韩专区 | 日韩久久久久 | 99精品国产一区二区青青牛奶 | 中文字幕一区二区三区乱码在线 | 精品欧美乱码久久久久久 | 精品伊人 | 国产精品久久久久久久久久三级 | 国产成人午夜高潮毛片 | 午夜国产精品视频 | 欧美黄色性生活视频 |