HQLクエリが機能しません。 '、'エラーの近くに構文が正しくありません。春を使用して、私は更新クエリとなってエラーを次のコマンドを実行しようとしています

2011-05-11 6 views
1

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

は、しかし、クエリが動作している選択であるが、更新のための :

WARN [http-8080-2] (JDBCExceptionReporter.java:71) - SQL Error: 102, SQLState: S0001

ERROR [http-8080-2] (JDBCExceptionReporter.java:72) - Incorrect syntax near ','.

org.hibernate.exception.SQLGrammarException: could not execute update query

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

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

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

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

at org.hibernate.engine.query.HQLQueryPlan.performExecuteUpdate(HQLQueryPlan.java:209)

なぜこのようなことが起こっているのかわかりません。私はクエリのどこにでも "、"を使用していませんが、それでも不正な構文が近いと言います。 '、' なぜそうですか?これを解決するには? ありがとうございます。すべての

+0

これは本当に変です。気になるのは、userIDにカンマが含まれていることだけですが、あなたがチェックしたと確信しています。 – Till

+0

genereated SQLクエリをログに記録してみます。 – axtavt

答えて

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

を使用するとすることができます。

+0

そのプロパティを追加しましたが、クエリが表示されない理由がわかりません。 – Sagar

+0

あなたのSQLクエリを表示してください。 –

+0

"更新注文セットorderStatus =完了しました。ここでorderStatus = closed、account.profile.userId = '" + userID + "'";このクエリを実行したい。 – Sagar

0

Orderはバッククォート(MySQLの場合)または二重引用符(PostgreSQLの場合)などでエスケープしてください。クエリが生のSQLとして使用されている場合、データベースはそれを予約済みのキーワード(ORDER BYなど)として認識します。

0

あなたはこの1

 
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+"'"; 

引用すべきではない欠けています。

+0

あまりにも機能していない、両方の方法を試してみました。 – Sagar

関連する問題