如何从 Spring Data JPA GROUP BY 查询中实现 ORDER BY

How to implement ORDER BY from a Spring Data JPA GROUP BY query

基于问题,我的自定义查询有效,如下:

@Query("select new br.com.cwidevs.dto.Goleador(j.id, sum(pj.gols)) from PartidaJogador pj join pj.id.jogador j group by j.id")
public List<Goleador> getGoleadores();

这是简单的 bean class:

public class Goleador {

    private Long jogador;

    private Long totalGols;    
}

此时,如何实现ORDER BY?我可以用 Sort 实现吗?

JpaRepository 扩展 PagingAndSortingRepository 所以你可以明确地使用 Sort

将参数添加到您的方法
public List<Goleador> getGoleadores(Sort sort);

当您调用它时,只需指定您要按哪一列对查询进行排序,您就可以了.

repoGoleador.getGoleadores(new Sort("jogador"));  

试试这个:

@Entity
public class Goleador {
    //...
}

@Entity
public class PartidaJogador {
    //...

    @ManyToOne
    private Goleador jogador;

    private Long gols;

    //...
}

// DTO as Projection
public interface GoleadorWithGols {
    Goleador getGoleador();
    Long getTotalGols()
}

public interface GoleadorRepo extends JpaRepository<Goleador, Long> {
    @Query("select j as goleador, sum(pj.gols) as totalGols from PartidaJogador pj join pj.jogador j group by j order by totalGols")
    List<GoleadorWithGols> getGoleadores();
}

这里我们使用projectionGoleadorWithGols作为DTO来获取必要的数据。

更多信息是here

我刚刚解决了这个问题:

基于

Class 的 Projections 不适用于查询

native(@Query(value = "SELECT ...", nativeQuery = true))

所以我建议使用接口定义自定义 DTO。 在使用 DTO 之前应该验证查询在语法上是否正确。