2011-07-06 100 views
2

在我們的應用程序中,我們有雙重持久性。首先,實體可以在MySQL數據庫中在線保存(我們使用的是Hibernate),其次,實體可以通過序列化保存在本地。休眠和序列化

我所說的實體是包含KnowledgeBase對象的類User的對象和KnowledgeBase包含實體(List<Card>List<Deck>)的兩個列表。

這兩種持久性都可以單獨工作,但是當我試圖從數據庫中加載序列化的User對象(即至少一次(實際上是兩次)低谷的Hibernate)時會出現問題。

我注意到ArrayList裏面的KnowledgeBasePersistentBag所取代。這可能是我的問題的根源嗎?

另一個猜測可能是懶加載導致這些麻煩......有沒有辦法讓Hibernate在某個時刻完全加載對象? (除了急於加載...)

回答

4

是的,Hibernate.initialize(..)初始化對象和集合。

然後,如果需要,您可以使用拷貝構造函數的常規java.util那些替換集合:setList(new ArrayList(list))

+1

這的確是初始化對象和集合,但它一直在Hibernate專有的集合類型。我們遇到了使用XStream編組/解組裝Hibernate加載對象的問題。有沒有更好的方法,而不僅僅是重載一個Hibernate加載的對象到同一類型的正常實例化的對象? – Olaf

+0

@Olaf是的,請在一分鐘內查看我的更新 – Bozho

+0

謝謝!我下次必須使用這個,我必須使用XStream將Hibernate加載的實體編組爲XML。 – Olaf