Grails: использование ANY_VALUE () в запросе критериев, чтобы избежать `only_full_group_by` в MYSQL версии 5.7+ - PullRequest
0 голосов
/ 29 апреля 2019

Я недавно обновил MySQL с 5.6 до 5.7.14, и теперь все запросы критериев, которые использовали groupProperty, терпят неудачу с ошибкой, подобной упомянутой ниже:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test_dev.this_.user_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

Это связано с текущим изменением подхода MySQL к обработке GROUP BY, который упоминается здесь .

Итак, согласно этим журналам изменений, мы можем решить эту проблему следующим образом:

  1. Отключение ONLY_FULL_GROUP_BY, что, на мой взгляд, не очень удачный подход.
  2. Использование ANY_VALUE() для ссылки на неагрегированный столбец.

Но нет такой опции, чтобы использовать any_value() в запросе критериев Grails. Обновление запроса до низкоуровневого оператора SQL или использование HQL может помочь, но для этого потребуются изменения в нескольких местах.

Итак, есть ли лучший подход, с помощью которого мы можем справиться с вышеупомянутым сценарием?

1 Ответ

0 голосов
/ 29 апреля 2019

Вы можете просто использовать MIN или MAX, если ANY_VALUE недоступно.

Сказав это, я бы предпочел исследовать каждый запрос и начать с исправления части GROUP BY.

...