Столбец недопустим в предложении ORDER BY с JPA и SQL Server

#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 в запросе это сработало.