比较JPA中的集合的相等性

时间:2012-11-12 17:35:01

标签: jpa jpql

首先,我将展示这个问题的后退......

我尝试快速且无需减少任务的存储库实现。有问题的对象如下所示:

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

    ....
}

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

主要问题出现了:如何用SomeData的任意集合(作为参数加上)来检查SomeObject中的SomeData集合的相等性(顺序是没有意义的)?

我尝试通过组合JPA SIZEOF和数十个MEMBER BY来确保两个集合的相等性。它起作用但性能绝对可怕。

1 个答案:

答案 0 :(得分:0)

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