我正在使用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);
查询的目的是创建聊天信使概述,您可以在其中查看每个对话的最后一条消息。它在dev中工作正常,但在生产(较新的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中进行任何升级。如何修复查询?
答案 0 :(得分:0)
以下是GROUP BY(参见第4.7节)条款的定义和目的:
GROUP BY构造允许根据一组属性聚合结果值。
这意味着它仅在您聚合(sum,avg,max,min,...)字段的值时使用。但在你的情况下,我没有看到任何聚合功能。所以只需删除GROUP BY
子句,一切都应该没问题:
SELECT m FROM Message m WHERE m.from.userId = :myId OR m.to.userId = :myId ORDER BY m.date DESC
对userId
进行分组也没有意义,因为此查询返回的所有实体对此字段都具有相同的值。