sql_mode SET = (SELECT REPLACE (@@ sql_mode, 'ONLY_FULL_GROUP_BY', '')) para Jpa Repositorio

Nguyen Hoang Vu - K11 FuG HCM:

Estoy tratando de utilizar una consulta personalizada de esta manera:

@Query("SELECT i " + 
       "FROM ManagerWorkplace i " + 
       "WHERE i.managerId = ?1 " + 
       "AND i.companyId = ?2 " + 
       "GROUP BY i.zoneId")
List<ManagerWorkplace> findByManagerIdAndCompanyId(Long managerID, Long companyId);

pero me dio este error:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expresión # 1 de la lista de SELECT no es en la cláusula POR GRUPO y contiene la columna no agregada 'db_oem.managerwor0_.id' que no es funcionalmente dependiente de columnas en la cláusula GROUP BY; esto es incompatible con sql_mode = ONLY_FULL_GROUP_BY

Yo sé una manera de solucionar este error en MySQL utilizando

sql_mode SET = (SELECT REPLACE (@@ sql_mode, 'ONLY_FULL_GROUP_BY', ''))

, ¿Hay alguna manera de hacer lo mismo para JpaRepository?

ericj:

Su consulta no está bien. Va a seleccionar las columnas que no están en la tabla de resultados del grupo por. No tiene nada que ver con Java o APP.

Con un grupo de va a crear una nueva tabla. Habrá una fila para cada idDeZona. Supongamos que en la tabla original hay múltiples filas con un cierto idDeZona, y por al menos una columna hay valores diferentes en esas filas. Cuál debe tomar en la nueva tabla? Esto no se puede hacer.

También puede agrupar por varias columnas. En la nueva tabla, habrá una fila para cada combinación de esas columnas.

Así, en la nueva tabla puede seleccionar para las columnas que están en el grupo de, en su caso idDeZona. ¿Qué otras cosas se puede poner en la nueva tabla? Por ejemplo cuántos valores de una columna hay un idDeZona. Esto puede hacerse. O el máximo o mínimo de una columna (recuerde que tiene múltiples valores). Esto también se puede hacer. Estos son los agregados en la que estaban hablando.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=207288&siteId=1
Recomendado
Clasificación