2011-07-06 10 views
2

私たちのアプリケーションでは、デュアルパーシスタンスを持っています。まず、エンティティはMySQL DB(我々はHibernateを使用しています)にオンラインで保存することができます。次にエンティティはシリアル化によってローカルに保存することができます。ハイバーネーションとシリアル化

私が話して実体はKnowledgeBaseオブジェクトを含むクラスUserの対象であり、そのKnowledgeBaseは、エンティティ(List<Card>List<Deck>)の二つのリストが含まれています。

両方の永続性は別々に問題なく動作しますが、データベースからロードされたシリアル化されたUserオブジェクトをデシリアライズしようとすると問題が発生します。つまり、少なくとも1回はHibernateになっています。

ArrayListKnowledgeBaseの中にPersistentBagに置き換えられています。それが私の問題の原因になりますか?

また、レイジーローディングがこれらの問題を引き起こす可能性があります。ある時点でオブジェクトを完全にロードするようにHibernateに指示する方法はありますか? (熱心な読み込みとは別に...)

答えて

4

はい、Hibernate.initialize(..)は、オブジェクトとコレクションを初期化します。

その後、必要であれば、あなたはコピーコンストラクタを使用して定期的にjava.utilものでコレクションを置き換えることができます。setList(new ArrayList(list))

+1

それは確かにあるが、オブジェクトとコレクションを初期化しますが、それは、Hibernate独自のコレクション型を保持します。 XStreamを使ってHibernateをロードしたオブジェクトをマーシャリング/アンマーシャリングするという問題がありました。 Hibernateをロードしたオブジェクトを同じタイプの通常インスタンス化されたオブジェクトにリロードするよりも良い方法はありますか? – Olaf

+0

@Olafはい、1分で私の更新を確認してください – Bozho

+0

ありがとう!次回は、XStreamを使用してHibernateをロードしたエンティティをXMLにマーシャリングする必要があります。 – Olaf

関連する問題