Mysql
 sql >> Database >  >> RDS >> Mysql

Convalida non riuscita per la query per il metodo JPQL

Devi dire a Spring di trattare quella query come nativa. Altrimenti proverà a convalidarlo secondo la specifica JPA.

Prova:

@Query(value = "SELECT ...", nativeQuery = true)
public List<Object[]> transactions();

Tieni presente che in questo caso non è possibile utilizzare la sintassi dell'operatore NEW e dovresti gestire il risultato come un array di Object .

In alternativa

Se vuoi usare la mappatura dei risultati direttamente su una classe POJO dovresti (supponendo che tu stia usando JPA 2.1+):

1) Definisci la mappatura:

@SqlResultSetMapping(
    name="transactionsMapping",
    classes={
        @ConstructorResult(
            targetClass=ConsolidateResDB.class,
            columns={
                @ColumnResult(name="transdate"),
                @ColumnResult(name="orderreqid")
                // further mappings ...
            }
        )
    }
)

2) Definisci una query nativa

@NamedNativeQuery(name="transactions"
    , query="SELECT DATE_FORMAT(ts, '%d-%m-%Y') AS transdate, IFNULL(COUNT(orderreqid),0) ... ")

3) Definisci questo metodo nel CrudRepository senza il @Query annotazione:

public List<ConsolidateResDB> transactions();