2009-09-15 50 views
0

我正在序列化一個對象的深層次的對象。渴望提取一個對象

反序列化後,我只能訪問序列化之前對象中可用的字段。休息時,我得到LazyInitializationException。

class A { 
    List<B> objs 
} 

class B { 
    C c 
} 

class C { 
    D d 
} 

最初,我用得到LazyInitializationException中,同時訪問a.objs的* .c 然後我之前執行序列化一個循環:a.objs.each {} it.c現在 我得到a.objs LazyInitializationException中* .cd而不是a.objs * .c

如何確保對象在序列化之前從DB獲取每個引用?

回答

0

我能想到的唯一方法是遍歷初始化您找到的任何懶惰集合的對象圖。

唯一的另一種方法是在每個域類中使用映射閉包來禁用延遲加載。

在使用refresh()方法進行反序列化之後,您不能從數據庫中刷新對象嗎?

+0

目前我下面通過的方式走,但我每天都得到LazyInitializationException中一個新的使用案例,我添加一個新的遍歷:) 我不能禁用延遲加載,因爲我只是想深入渴望獲取僅在系列化&在整個應用程序中沒有其他查詢。 序列化對象由歷史快照組成。例如:我可能需要在一年前找到一個人的地址,而不是當前地址。 – 2009-09-16 05:12:24