【问题标题】:How do I get a distinct list of objects with JpaRepository.findAll using a Predicate?如何使用 Predicate 获得具有 JpaRepository.findAll 的不同对象列表?
【发布时间】:2013-08-12 21:24:59
【问题描述】:

我有类似的东西:

Predicate p = ...;
List<MyObject> objectList = (List<MyObject>) myRepository.findAll(p); // myRepository is autowired

这将获取所有 MyObjects 的列表,其中包含重复项。是否可以改为获得 DISTINCT 列表?

我真的需要使用 EntityManager 和 CriteriaBuilder 吗?还是可以仅使用谓词和存储库对象来完成?

我不是在谈论手动遍历列表并删除重复项,或使用任何 Collections API,而是更多关于 JPA 或 QueryDSL API。

【问题讨论】:

    标签: java spring-data-jpa querydsl


    【解决方案1】:

    是的,有可能。以下是我能想到的简单步骤

    • 在 MyObject 类中实现 hashCode() 和 equals()。

    • 直接使用它的构造函数根据上面的列表创建一个集合,该构造函数将集合作为参数。

    【讨论】:

    • +1 这当然是另一种方法,但不是我所期望的。更新了我的问题 - 不考虑使用 Collections API。但如果一切都失败了,我可能会考虑这个。
    • @geffchang 无论如何在内部 spring 也会这样做:)。
    • 我不能使用 Collections API,主要是因为 MyObjects 是一个自动生成的实体。它是由 Eclipse 中的 JPA 项目中的将 DB 表转换为 JPA 实体函数生成的。因此,添加 equals 和 hashCode 可能不是一个好主意。我必须为此创建另一个包装类,这又不是一个好主意。
    • @geffchang 你总是可以这样做的。问题出在哪里?
    • 使用包装类完全没有问题。只是检查是否有其他方法,使用 JPA 或 QueryDSL API。如果没有,我将只使用 Collections API(带有包装类)。
    猜你喜欢
    • 2022-06-11
    • 1970-01-01
    • 2021-11-30
    • 2012-07-16
    • 2013-06-22
    • 2021-08-11
    • 2015-11-20
    • 2021-05-31
    • 1970-01-01
    相关资源
    最近更新 更多