Musíte Springovi říct, aby s tímto dotazem zacházel jako s nativním. Jinak se jej pokusí ověřit podle specifikace JPA.
Zkuste:
@Query(value = "SELECT ...", nativeQuery = true)
public List<Object[]> transactions();
Mějte na paměti, že v tomto případě nelze použít syntaxi operátoru NEW a museli byste s výsledkem pracovat jako s polem Object
.
Alternativně
Pokud chcete použít mapování výsledků přímo do třídy POJO, budete muset (za předpokladu, že používáte JPA 2.1+):
1) Definujte mapování:
@SqlResultSetMapping(
name="transactionsMapping",
classes={
@ConstructorResult(
targetClass=ConsolidateResDB.class,
columns={
@ColumnResult(name="transdate"),
@ColumnResult(name="orderreqid")
// further mappings ...
}
)
}
)
2) Definujte nativní dotaz
@NamedNativeQuery(name="transactions"
, query="SELECT DATE_FORMAT(ts, '%d-%m-%Y') AS transdate, IFNULL(COUNT(orderreqid),0) ... ")
3) Definujte tuto metodu v CrudRepository
bez @Query
anotace:
public List<ConsolidateResDB> transactions();