0

首先,我将展示这个问题的背景......

我试图对存储库进行快速且无冗余的实现。有问题的对象如下所示:

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

    ....
}

SomeData 和 SomeOtherData 是实体,它们通常由 JPA 映射。后来我使 SomeObject 实例不可变,这可以进一步优化。SomeObject 变得可互换,我不想在 db 中重复。为了找到可能的重复项,我需要比较这些列表。

出现了主要问题:如何检查 SomeData 中 SomeData 集合的相等性 SomeObject (顺序没有意义)与 SomeData 的一些任意集合(作为参数提供)?

我已经尝试通过结合 JPA SIZEOF 和几十个 MEMBER BY 来确保两个集合相等的解决方法。它有效,但性能绝对可怕。

4

1 回答 1

0

在你的两个类中使用 HashSet 和实现 hashcode/equals 可能会解决你的问题,你也可以使用 @PrePersist 方法来确保你一致地应用过滤器。如果您需要更复杂的过滤,可以查看 org.apache.commons.collections.CollectionUtils。如果重复是不可接受的,则假定您还在数据库中使用唯一约束。

于 2012-11-13T15:21:52.400 回答