2011-03-28 58 views
0

嗨,我已經得到臭名昭着的「沒有會話或會話已關閉」我知道這是因爲我試圖在另一個會話中調用一個hibernate持久對象的集合,所以有一個方法來實際做到這一點,而不必創建過濾器並將JOIN提取模式添加到其中。...休眠從另一個會話獲取集合

GRAVE:未能延遲初始化角色集合:ni.edu.uni.id.data.object。 Curso.modulos,沒有會話或會話關閉 org.hibernate.LazyInitializationException:無法懶惰地初始化角色集合:ni.edu.uni.id.data.object.Curso.modulos,沒有會話或會話關閉

回答

-1

session.m erge根據具體情況提供更多幫助

0

刷新持久對象會更好。例如。調用DAO getById()傳遞對象的id,然後使用必要的集合。

+0

認真嗎?我害怕有人說:| – Necronet 2011-03-28 14:37:48

0

發生這種情況是因爲原始會話已關閉。在將項存儲在內存中之前,在Hibernate會話關閉之前,您需要訪問將在稍後使用的任何鏈接集合,以便將其加載到內存中。另一種方法是設置集合,使其處於Eager加載狀態,但這可能會影響性能。

通過即使訪問.Count屬性(C#,但同樣適用於Java),可以輕鬆地手動預裝集合。例如:

Brand b = BrandRepository.GetById(1234); 
int tmp = b.Products.Count; //this is only to load the products collection. This can then be used in a later session.