0

まず、この問題の背景を説明します...

高速で冗長性のないリポジトリの実装を試みました。問題のあるオブジェクトは次のようになります。

class SomeObject {
    @Id
    private Long id;
    private List<SomeData>;
    private List<SomeOtherData>;

    ....
}

SomeData と SomeOtherData はエンティティであり、通常は JPA によってマップされます。後で、いくつかの最適化を可能にする SomeObject インスタンスを不変にしました。SomeObject は交換可能になりました。db で重複を作成したくありません。重複の可能性を見つけるには、それらのリストを比較する必要があります。

主な問題が発生します: SomeObject の SomeData コレクション (順序は無意味) と SomeData の任意のコレクション (パラメーターとして提供) の等価性をチェックする方法は?

JPA SIZEOF と数十の MEMBER BY を組み合わせて、両方のコレクションの同等性を確保することで回避策を試しました。それは機能しましたが、パフォーマンスはまったくひどいものでした。

4

1 に答える 1

0

HashSet を使用し、2 つのクラスに hashcode/equals を実装すると問題が解決する場合があります。@PrePersist メソッドを使用して、フィルターを一貫して適用することもできます。より複雑なフィルタリングが必要な場合は、org.apache.commons.collections.CollectionUtils を調べてください。重複が許容されない場合は、データベースで一意の制約も使用していると想定されます。

于 2012-11-13T15:21:52.400 に答える