我正在尝试使用这样的自定义查询:

@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);

但是我得到了这个错误:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:SELECT列表的表达式#1不在GROUP BY子句中,并且包含未聚合的列'db_oem.managerwor0_.id',该列在功能上不依赖于GROUP BY子句中的列;这与sql_mode = only_full_group_by不兼容

我知道一种通过使用以下方法在MySQL上修复此错误的方法

SET sql_mode =(选择替换(@@ sql_mode,'ONLY_FULL_GROUP_BY',''))

,有什么办法可以对JpaRepository做同样的事情?

最佳答案

您的查询不正确。您正在选择不在分组依据的结果表中的列。它与Java或JPA无关。

与一个组一起创建新表。每个zoneId将有一行。假设在原始表中有多个具有特定zoneId的行,并且对于至少一列,这些行中具有不同的值。在新表中应该使用哪一个?无法做到这一点。

您也可以按多列分组。在新表中,这些列的每种组合都会有一行。

因此,在新表中,您可以选择分组依据中的列(在您的情况下为zoneId)。您还可以在新表格中添加哪些内容?例如,zoneId有多少列值。可以做到的。或一列的最大值或最小值(请记住具有多个值)。这也可以做到。这是他们正在谈论的汇总。

关于java - 为Jpa存储库设置sql_mode = {SELECT REPLACE(@@ sql_mode,'ONLY_FULL_GROUP_BY','')),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55200224/

10-09 05:53