Você disse ao Spring para tratar essa consulta como nativa. Caso contrário, ele tentará validá-lo de acordo com a especificação JPA.
Experimentar:
@Query(value = "SELECT ...", nativeQuery = true)
public List<Object[]> transactions();
Tenha em mente que não pode usar a sintaxe do operador NEW neste caso e você teria que lidar com o resultado como um array de
Object
. Alternativamente
Se você quiser usar mapear os resultados diretamente para uma classe POJO, você teria que (supondo que você esteja usando JPA 2.1+):
1) Defina o mapeamento:
@SqlResultSetMapping(
name="transactionsMapping",
classes={
@ConstructorResult(
targetClass=ConsolidateResDB.class,
columns={
@ColumnResult(name="transdate"),
@ColumnResult(name="orderreqid")
// further mappings ...
}
)
}
)
2) Definir uma consulta nativa
@NamedNativeQuery(name="transactions"
, query="SELECT DATE_FORMAT(ts, '%d-%m-%Y') AS transdate, IFNULL(COUNT(orderreqid),0) ... ")
3) Defina este método no
CrudRepository
sem o @Query
anotação:public List<ConsolidateResDB> transactions();