Mysql
 sql >> Base de données >  >> RDS >> Mysql

Échec de la validation de la requête pour la méthode JPQL

Vous devez dire à Spring de traiter cette requête comme une requête native. Sinon, il essaiera de le valider selon la spécification JPA.

Essayez :

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

Gardez à l'esprit que vous ne pouvez pas utiliser la syntaxe de l'opérateur NEW dans ce cas et que vous devrez traiter le résultat comme un tableau de Object .

Alternativement

Si vous souhaitez utiliser mapper les résultats directement sur une classe POJO, vous devrez (en supposant que vous utilisez JPA 2.1+) :

1) Définissez le mappage :

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

2) Définir une requête native

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

3) Définissez cette méthode dans le CrudRepository sans le @Query annotation :

public List<ConsolidateResDB> transactions();