我正在尝试执行以下更新查询并收到错误
查询是=
@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)
我不明白为什么会这样。我在查询中的任何地方都没有使用“,”但它仍然表示','附近的语法不正确 为什么会这样?怎么解决这个? 提前谢谢。
答案 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表达式的引号。