2009-07-02 5 views
0

これは私が実際に今混乱しているので、this oneへのフォローアップの質問です。Hibernate内のエンティティのコレクションの落とし穴

は、私はJavaでPersonクラスがSet<Event>が含まれていることを実体Personと、このようなEventの間に1対多または多対多関連を持っていると仮定します。 (イベントに単一のPersonまたはSet<Person>が含まれているかどうかを無視してみましょう)

Eventは、データベースに格納されているエンティティなので、イベントフィールドを変更できます。 Eventの変更可能性を処理し、Java Set <> IDの確認が混乱しないようにする正しい方法は何ですか?この場合、hashCode()および/またはequals()を上書きすることは決してありませんか? (ID =オブジェクト参照IDに基づいて)

Eventを注文する(イベントの開始時間など)には、Eventのフィールドの変更を管理するにはどうすればよいですか?変更が一旦そこに伝播すると、データベースはそれをうまく処理しますが、Java側では、コレクション内のEventを変更するために、削除して変更して再挿入する必要がありますか?あるいは、HibernateマッピングのJava側でソートされた順序を維持する実際の方法はありませんか? (したがって、私は順不同としてそれを処理するために持っているので、私はEvent秒のソートされたリストを取得したい時はいつでも、Javaでソート扱い?)

編集:

不潔、私はただのequals/hashCodeを上これらの議論を見つけました

答えて

0

それはあなたが期待することを言った意味論を強制だ、まったく落とし穴はありません。 本当の問題は、「私のいわゆるキーフィールドが変わると、何が平等になるか」です。はい、窓の外に出ます。だから、誰かがあなたのセット内のフィールドを変更し、それらのキーに基づいて他のフィールドと同じになるような状況に陥る可能性があります。 はい、ビジネスロジックがそれを処理する必要があります。 Eventオブジェクトを更新するときは、フィールドだけでなく、入れているコンテキストにも新しい値が有効であることを確認する必要があります。この場合、更新されるイベントオブジェクトを複製することを許可できません既存のイベント。 この問題は、SQLではさらに厄介です。

関連する問題