HQL查询不起作用,','错误附近的语法不正确。使用Spring和Hibernate

时间:2011-05-11 11:00:47

标签: sql hibernate spring spring-mvc hql

我正在尝试执行以下更新查询并收到错误

查询是=

@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);
} 
}

但是,选择查询正在运行但是  对于更新查询,它正在给予  以下错误:

  

警告[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.performExecuteUpdate(HQLQueryPlan.java:209)

我不明白为什么会这样。我在查询中的任何地方都没有使用“,”但它仍然表示','附近的语法不正确 为什么会这样?怎么解决这个? 提前谢谢。

3 个答案:

答案 0 :(得分:2)

首先:

<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);

可能这些更改将帮助您消除问题。

答案 1 :(得分:0)

我不确定但是尝试通过反引号(对于MySQL)或双引号(对于PostgreSQL)或类似情况来逃避Order。如果您的查询使用原始SQL,那么数据库可能会将其识别为保留关键字(如ORDER BY)。

答案 2 :(得分:0)

你错过了这个中的引号

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表达式的引号。