首先,我将展示这个问题的后退......
我尝试快速且无需减少任务的存储库实现。有问题的对象如下所示:
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来确保两个集合的相等性。它起作用但性能绝对可怕。
答案 0 :(得分:0)
在两个类中使用HashSet并实现hashcode / equals可能会解决您的问题,您也可以使用@PrePersist方法来确保始终如一地应用过滤器。如果您需要更复杂的过滤,请查看org.apache.commons.collections.CollectionUtils。如果重复项不可接受,则假设您在数据库中也使用了唯一约束。