Bạn đã yêu cầu Spring coi truy vấn đó là truy vấn gốc. Nếu không, nó sẽ cố gắng xác thực nó theo đặc điểm kỹ thuật của JPA.
Hãy thử:
@Query(value = "SELECT ...", nativeQuery = true)
public List<Object[]> transactions();
Hãy nhớ rằng không thể sử dụng cú pháp toán tử MỚI trong trường hợp này và bạn sẽ phải xử lý kết quả là một mảng Object
.
Ngoài ra
Nếu bạn muốn sử dụng ánh xạ kết quả trực tiếp tới một lớp POJO, bạn sẽ phải (giả sử rằng bạn đang sử dụng JPA 2.1+):
1) Xác định ánh xạ:
@SqlResultSetMapping(
name="transactionsMapping",
classes={
@ConstructorResult(
targetClass=ConsolidateResDB.class,
columns={
@ColumnResult(name="transdate"),
@ColumnResult(name="orderreqid")
// further mappings ...
}
)
}
)
2) Xác định một truy vấn gốc
@NamedNativeQuery(name="transactions"
, query="SELECT DATE_FORMAT(ts, '%d-%m-%Y') AS transdate, IFNULL(COUNT(orderreqid),0) ... ")
3) Xác định phương pháp này trong CrudRepository
không có @Query
chú thích:
public List<ConsolidateResDB> transactions();