まず、この問題の背景を説明します...
高速で冗長性のないリポジトリの実装を試みました。問題のあるオブジェクトは次のようになります。
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 を組み合わせて、両方のコレクションの同等性を確保することで回避策を試しました。それは機能しましたが、パフォーマンスはまったくひどいものでした。