gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:08:45 26 4
gpt4 key购买 nike

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

@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: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'db_oem.managerwor0_.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

我知道使用

在 MySQL 上修复此错误的方法

SET sql_mode=(SELECT REPLACE(@@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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com