Vous devez dire à Spring de traiter cette requête comme une requête native. Sinon, il essaiera de le valider selon la spécification JPA.
Essayez :
@Query(value = "SELECT ...", nativeQuery = true)
public List<Object[]> transactions();
Gardez à l'esprit que vous ne pouvez pas utiliser la syntaxe de l'opérateur NEW dans ce cas et que vous devrez traiter le résultat comme un tableau de Object
.
Alternativement
Si vous souhaitez utiliser mapper les résultats directement sur une classe POJO, vous devrez (en supposant que vous utilisez JPA 2.1+) :
1) Définissez le mappage :
@SqlResultSetMapping(
name="transactionsMapping",
classes={
@ConstructorResult(
targetClass=ConsolidateResDB.class,
columns={
@ColumnResult(name="transdate"),
@ColumnResult(name="orderreqid")
// further mappings ...
}
)
}
)
2) Définir une requête native
@NamedNativeQuery(name="transactions"
, query="SELECT DATE_FORMAT(ts, '%d-%m-%Y') AS transdate, IFNULL(COUNT(orderreqid),0) ... ")
3) Définissez cette méthode dans le CrudRepository
sans le @Query
annotation :
public List<ConsolidateResDB> transactions();