根据问题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来实现这个目标吗?
答案 0 :(得分:3)
试试这个:
@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();
}
此处,我们使用projection GoleadorWithGols 作为DTO来获取必要的数据。
更多信息是here。
答案 1 :(得分:2)
JpaRepository 扩展 PagingAndSortingRepository ,因此您可以明确地使用Sort
为您的方法添加参数
public List<Goleador> getGoleadores(Sort sort);
当您调用它时,只需指定要对查询进行排序的列,您应该是好的。
repoGoleador.getGoleadores(new Sort("jogador"));
答案 2 :(得分:0)
我刚刚解决了这个问题:
基于类的Projections
不适用于查询
native(@Query(value = "SELECT ...", nativeQuery = true))
因此,我建议使用interface定义自定义DTO
。
在使用DTO
之前,应先从语法上验证查询是否正确。