簡體   English   中英

如何從 Spring Data JPA GROUP BY 查詢中實現 ORDER BY

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

基於問題How to return a custom object 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 類:

public class Goleador {

    private Long jogador;

    private Long totalGols;    
}

此時,如何實現ORDER BY 我可以用Sort實現嗎?

試試這個:

@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();
}

這里我們使用投影GoleadorWithGols作為 DTO 來獲取必要的數據。

更多信息在這里

JpaRepository擴展了 PagingAndSortingRepository所以你可以明確地使用Sort

將參數添加到您的方法
public List<Goleador> getGoleadores(Sort sort);

當你調用它時,只需指定你想按哪一列對查詢進行排序,你就可以了。

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

我剛剛解決了這個問題:

基於類的Projections不適用於查詢

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

所以我建議使用接口定義自定義DTO 在使用DTO之前應該驗證查詢在語法上是否正確。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM