select 个不同的值使用 spring 个数据剩余

select distinct values using spring data rest

我正在使用 java 8 和 spring-data-rest 在我的数据上创建 API。

我有一辆table车(id, name, date...)

我正在尝试使用端点来检索不同的汽车名称。

这是我的存储库:

@RepositoryRestResource(path = "cars")    
public interface CarRepository extends JpaRepository<Car, Long> {
    //What i want to do
    //@Query(value = "select distinct c.name as name from Car c")
    @Query(value = "select distinct c from Car c")
    List<Car> findDistinctName();      
}

评论的查询不起作用,我有一个例外

java.lang.IllegalArgumentException: PersistentEntity must not be null! 

显然这是 SDR 的正常行为。

我尝试了另一种解决方案,使用 Projections

@Projection(name = "name", types = {Car.class})
public interface CarName {
    String getName();
}

但我无法获得不同的值,知道吗?

谢谢:)

如果你需要一个不同的汽车列表,你需要做的就是这样的查询方法:

public interface CarRepository extends JpaRepository<Car, Long> {
    List<Car> findDistinctBy();
}

Spring Data JPA 支持存储库查询方法中的 Distinct 关键字以在要创建的查询上设置不同的标志。

我找到了一个(丑陋的)解决方法,使用 jpql :

@Query(value = "select c from Car C WHERE c.id IN (SELECT min(ca.id) FROM Car ca Group by ca.name)")

我认为您应该删除@Query 注释。 只是 List<Car> findDistinctName();List<Car> findNameDistinct(); 应该就足够了。 它会自动生成查询 select c.name from Car c