【发布时间】:2018-03-05 02:17:14
【问题描述】:
我正在使用 Spring Boot 1.5.2 和以下@Query:
@Query(value = "SELECT m FROM Message m WHERE m.from.userId = :myId OR m.to.userId = :myId GROUP BY m.from.userId, m.to.userId ORDER BY m.date DESC")
List<Message> chatOverview(@Param("myId") final Long myUserId);
查询的目的是创建一个聊天信使概览,您可以在其中看到每个对话的最后一条消息。它在开发中对我来说很好,但在生产中(较新的 MySQL 数据库版本)我得到这个错误:
java.sql.SQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'message0_.message_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
我在thread 中读到了此更改的原因是什么,但是我找不到使用 JPA / Spring 解决此问题的方法。我无法更改生产 MySQL 数据库中的任何设置,我也想避免在 Spring 中进行任何升级。如何修复我的查询?
【问题讨论】:
-
"Spring Boot" 不会创建该查询,您的 JPA 提供程序会创建(哪个?)。而且您还没有发布正在调用的 ACTUAL SQL
-
当然,但是 Spring Boot 定义了 JPA 提供程序 -> Hibernate。对于实际的 SQL,我将尝试获取它(我认为它是使用调试日志记录的),但我认为它不会有太大帮助,因为我无法修改实际的 SQL,而只能修改 JPQL ....
-
你定义了 JPA 提供者(给 Spring)。然后使用实际的 SQL 报告您选择的 JPA 提供程序的一个 BUG,说我想在这个数据库上执行这个 JPQL 并得到这个无效的 SQL。
-
是的,禁用它也记录在上面的链接线程中 - 但是正如我所说,我无法修改生产中的设置。
标签: java mysql spring hibernate jpql