欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

怎么在Hibernate中實例化集合和代理

本篇內容主要講解“怎么在Hibernate中實例化集合和代理”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么在Hibernate中實例化集合和代理”吧!

我們提供的服務有:網(wǎng)站設計、做網(wǎng)站、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、義馬ssl等。為上千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的義馬網(wǎng)站制作公司

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

到此,相信大家對“怎么在Hibernate中實例化集合和代理”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

網(wǎng)頁標題:怎么在Hibernate中實例化集合和代理
文章路徑:http://www.chinadenli.net/article16/pgicgg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供標簽優(yōu)化外貿建站企業(yè)網(wǎng)站制作網(wǎng)頁設計公司營銷型網(wǎng)站建設

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設