Devi dire a Spring di trattare quella query come nativa. Altrimenti proverà a convalidarlo secondo la specifica JPA.
Prova:
@Query(value = "SELECT ...", nativeQuery = true)
public List<Object[]> transactions();
Tieni presente che in questo caso non è possibile utilizzare la sintassi dell'operatore NEW e dovresti gestire il risultato come un array di Object
.
In alternativa
Se vuoi usare la mappatura dei risultati direttamente su una classe POJO dovresti (supponendo che tu stia usando JPA 2.1+):
1) Definisci la mappatura:
@SqlResultSetMapping(
name="transactionsMapping",
classes={
@ConstructorResult(
targetClass=ConsolidateResDB.class,
columns={
@ColumnResult(name="transdate"),
@ColumnResult(name="orderreqid")
// further mappings ...
}
)
}
)
2) Definisci una query nativa
@NamedNativeQuery(name="transactions"
, query="SELECT DATE_FORMAT(ts, '%d-%m-%Y') AS transdate, IFNULL(COUNT(orderreqid),0) ... ")
3) Definisci questo metodo nel CrudRepository
senza il @Query
annotazione:
public List<ConsolidateResDB> transactions();