HQL-запрос не работает, неправильный синтаксис рядом с ошибкой ','.Использование Spring и Hibernate - PullRequest
1 голос
/ 11 мая 2011

Я пытаюсь выполнить следующий запрос на обновление и получаю сообщение об ошибке,

Запрос =

@Transactional
public List<Order> getClosedOrders(String userID) throws DataAccessException {
try { 

String SQL_SELECT_QUERY = "from Order as o where o.orderStatus='closed' and o.account.profile.userId='"+userID+"'";

String SQL_UPDATE_QUERY = "update Order set orderStatus=completed where orderStatus=closed and account.profile.userId='"+userID+"'";

List<Order> orderList = (List<Order>) list(SQL_SELECT_QUERY); 

if(!orderList.isEmpty()) {

batchUpdate(SQL_UPDATE_QUERY);
return orderList;
}
return null;
} catch(Exception ex) {

ex.printStackTrace();
throw new DataAccessException(errorMessage);
} 
}

Однако запрос Select работает, но для запроса на обновление он выдает следующую ошибку:

WARN [http-8080-2] (JDBCExceptionReporter.java:71) - Ошибка SQL: 102, SQLState: S0001

ОШИБКА [http-8080-2] (JDBCExceptionReporter.java:72) - Неверный синтаксис рядом с ','.

org.hibernate.exception.SQLGrammarException: не удалось выполнить запрос на обновление

в org.hibernate.exception.SQLStateConverter.convert (SQLStateConverter.java:67)

в org.hibernate.exception.JDBCExceptionHelper.convert (JDBCExceptionHelper.java:43)

в org.hibernate.hql.ast.exec.BasicExecutor.execute (BasicExecutor.java:84)

в org.hibernate.hql.ast.QueryTranslatorImpl.executeUpdate (QueryTranslatorImpl.java:334)

в org.hibernate.engine.query.HQLQueryPlan.performExecutejp:209)

Я не понимаю, почему этос происходит.Я не использую "," где-либо в своем запросе, но все же он говорит, что неправильный синтаксис рядом с ',' Почему это так?Как это решить?Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 11 мая 2011

Прежде всего:

<property name="hibernate.show.sql" value="true"></property>

Это вам очень поможет.

Второй из всех:

String SQL_UPDATE_QUERY = "update Order set orderStatus=completed where orderStatus=closed and account.profile.userId=:userId";

и используйте

addString("userId",userId);

Возможно, эти изменения помогут вам устранить проблему.

0 голосов
/ 12 мая 2011

Вы пропускаете кавычки в этом

String SQL_UPDATE_QUERY = "update Order set orderStatus=completed where orderStatus=closed and account.profile.userId='"+userID+"'";

Разве это не должно быть

String SQL_UPDATE_QUERY = "update Order set orderStatus='completed' where orderStatus='closed' and account.profile.userId='"+userID+"'";

Кавычки для всех выражений orderStatus.

0 голосов
/ 11 мая 2011

Я не уверен, но пытаюсь избежать Order обратными чертами (для MySQL) или двойными кавычками (для PostgreSQL) или подобными.Если ваш запрос использует сырой SQL, база данных может распознать его как зарезервированное ключевое слово (например, ORDER BY).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...