Każesz Springowi traktować to zapytanie jako natywne. W przeciwnym razie spróbuje zweryfikować to zgodnie ze specyfikacją JPA.
Wypróbuj:
@Query(value = "SELECT ...", nativeQuery = true)
public List<Object[]> transactions();
Należy pamiętać, że w tym przypadku nie można użyć składni operatora NEW, a wynik byłby tablicą Object
.
Alternatywnie
Jeśli chcesz użyć mapowania wyników bezpośrednio do klasy POJO, musisz (zakładając, że używasz JPA 2.1+):
1) Zdefiniuj mapowanie:
@SqlResultSetMapping(
name="transactionsMapping",
classes={
@ConstructorResult(
targetClass=ConsolidateResDB.class,
columns={
@ColumnResult(name="transdate"),
@ColumnResult(name="orderreqid")
// further mappings ...
}
)
}
)
2) Zdefiniuj zapytanie natywne
@NamedNativeQuery(name="transactions"
, query="SELECT DATE_FORMAT(ts, '%d-%m-%Y') AS transdate, IFNULL(COUNT(orderreqid),0) ... ")
3) Zdefiniuj tę metodę w CrudRepository
bez @Query
adnotacja:
public List<ConsolidateResDB> transactions();