Трябва да кажете на Spring да третира тази заявка като собствена. В противен случай ще се опита да го потвърди според спецификацията на JPA.
Опитайте:
@Query(value = "SELECT ...", nativeQuery = true)
public List<Object[]> transactions();
Имайте предвид, че в този случай не можете да използвате синтаксиса на оператора NEW и ще трябва да се справите с резултата като масив от Object
.
Алтернативно
Ако искате да използвате картографиране на резултатите директно към POJO клас, ще трябва (ако приемем, че използвате JPA 2.1+):
1) Определете съпоставянето:
@SqlResultSetMapping(
name="transactionsMapping",
classes={
@ConstructorResult(
targetClass=ConsolidateResDB.class,
columns={
@ColumnResult(name="transdate"),
@ColumnResult(name="orderreqid")
// further mappings ...
}
)
}
)
2) Дефиниране на собствена заявка
@NamedNativeQuery(name="transactions"
, query="SELECT DATE_FORMAT(ts, '%d-%m-%Y') AS transdate, IFNULL(COUNT(orderreqid),0) ... ")
3) Дефинирайте този метод в CrudRepository
без @Query
анотация:
public List<ConsolidateResDB> transactions();