sql >> Base de Datos >  >> RDS >> Mysql

La validación falló para la consulta del método JPQL

Tienes que decirle a Spring que trate esa consulta como nativa. De lo contrario, intentará validarlo de acuerdo con la especificación JPA.

Prueba:

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

Tenga en cuenta que no puede usar la sintaxis del operador NEW en este caso y tendría que tratar con el resultado como una matriz de Object .

Alternativamente

Si desea usar mapear los resultados directamente a una clase POJO, tendría que hacerlo (asumiendo que está usando JPA 2.1+):

1) Defina la asignación:

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

2) Definir una consulta nativa

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

3) Defina este método en el CrudRepository sin el @Query anotación:

public List<ConsolidateResDB> transactions();