为Jpa存储库设置sql_mode = {SELECT REPLACE(@@ sql_mode,'ONLY_FULL_GROUP_BY',''))

时间:2019-03-16 18:34:51

标签: java mysql spring-boot group-by spring-data-jpa

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

@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做同样的事情吗?

1 个答案:

答案 0 :(得分:3)

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

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

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

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