Java 如何使用谓词通过JpaRepository.findAll获得对象的不同列表?

Java 如何使用谓词通过JpaRepository.findAll获得对象的不同列表?,java,spring-data-jpa,querydsl,Java,Spring Data Jpa,Querydsl,我有点像: Predicate p = ...; List<MyObject> objectList = (List<MyObject>) myRepository.findAll(p); // myRepository is autowired 谓词p=。。。; List objectList=(List)myRepository.findAll(p);//myRepository是自动连线的 这将获取所有MyObject的列表,其中包含重复项。是否可以获得一个不同

我有点像:

Predicate p = ...;
List<MyObject> objectList = (List<MyObject>) myRepository.findAll(p); // myRepository is autowired
谓词p=。。。;
List objectList=(List)myRepository.findAll(p);//myRepository是自动连线的
这将获取所有MyObject的列表,其中包含重复项。是否可以获得一个不同的列表

我真的需要使用EntityManager和CriteriaBuilder吗?或者可以只使用谓词和repository对象来完成吗


我不是说手动遍历列表并删除重复项,也不是说使用任何Collections API,而是更多关于JPA或QueryDSL API的内容。

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

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

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


    • 是的,这是可能的。下面是我能想到的简单步骤

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

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


      +1这当然是另一种方法,但不是我所期望的。更新我的问题-不要考虑使用集合API。但是,如果所有其他的都失败了,我可能会考虑这个问题。“GeprCoun无论如何,Spring也会做同样的事情:”我不能使用集合API,主要是因为MyObjor是一个自动生成的实体。它是由Eclipse中JPA项目中的convert DB table to JPA entities函数生成的。因此,添加equals和hashCode可能不是一个好主意。我必须为此制作另一个包装器类,这也不是一个好主意。@geffchang你总是可以这样做的。问题出在哪里?使用包装器类一点问题都没有。只是检查是否有其他方法,使用JPA或QueryDSLAPI。如果没有,我将只使用Collections API(与包装类一起)。+1这当然是另一种方法,但不是我所期望的。更新我的问题-不要考虑使用集合API。但是,如果所有其他的都失败了,我可能会考虑这个问题。“GeprCoun无论如何,Spring也会做同样的事情:”我不能使用集合API,主要是因为MyObjor是一个自动生成的实体。它是由Eclipse中JPA项目中的convert DB table to JPA entities函数生成的。因此,添加equals和hashCode可能不是一个好主意。我必须为此制作另一个包装器类,这也不是一个好主意。@geffchang你总是可以这样做的。问题出在哪里?使用包装器类一点问题都没有。只是检查是否有其他方法,使用JPA或QueryDSLAPI。如果没有,我将只使用Collections API(与包装器类一起使用)。