![](/img/trans.png)
[英]How to return a custom object from a Spring Data JPA GROUP BY query
[英]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.