#sql-server #hibernate #spring-data-jpa #jpql #jpa-2.0
Вопрос:
Когда я искал эту ошибку, нашел много результатов, но все ответы даны на уровне базы данных (SQL Server). Но я получаю эту ошибку с запросом JPA( простой запрос количества с предложением заказа) и базой данных SQL Server. Этот код отлично работает с базой данных MySQL.
Код:
FilterBuilder builder = new FilterBuilder("FROM RuleChangeLog A "); { builder.startWhere(); builder.checkAndAdd1(filters[0], "and A.action LIKE ?", filters[0] ); builder.checkAndAdd1(filters[1], "and A.ruleName like ?", filters[1] ); builder.checkAndAdd1(filters[2], "and A.updatedBy like ?", filters[2] ); } TypedQuerylt;Longgt; countQuery = em.createQuery("select count(A) " builder.getJPQL(), Long.class); builder.setParameters(countQuery);
Ошибка ниже, когда я запускаю countQuery.getSingleResult()
метод.
Вызвано: com.microsoft.sqlserver.jdbc.SQLServerException: Столбец «rule_change_log.update_time» недопустим в предложении ORDER BY, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY.
Ниже приведен преобразованный запрос базы данных для того же:
select count(rulechange0_.id) as col_0_0_ from rule_change_log rulechange0_ where 1=1 order by rulechange0_.update_time DESC
Комментарии:
1. Эта ошибка объясняется сама собой… вы не можете упорядочивать по столбцу, когда ведете подсчет… потому что вы ожидаете только 1 строку.
2. Таким образом, вы не можете использовать это для заказа, потому что вы не выбираете его (или не используете функцию, такую как MAX и т. Д.)
3. ладно, понял. Позвольте мне попробовать b удалить предложение order в запросе.
Ответ №1:
Как предположил @Dale K, после удаления предложения order в запросе это сработало.