2013-10-02 39 views
2

我有,我想通過Hibernate運行原生SQL查詢,但將引發一個錯誤:休眠投擲:意外的標記「」之後發現「」

org.hibernate.exception.SQLGrammarException: 
could not execute native bulk manipulation query 
Caused by: 
com.ibm.db2.jcc.am.SqlSyntaxErrorException: An unexpected token "" 
was found following "". Expected tokens may include: "NQ_EXE_ID = 12345" 

我運行進行更新的代碼:

SQLQuery updateQuery = getSession().createSQLQuery(updateSql); 
System.out.println(updateQuery.getQueryString());  
updateQuery.executeUpdate(); 

在調試期間,我可以在對象的SQLQuery看到裏面和SQL是:(它運行在DB2細)

UPDATE some_table SET DEST_FLDR = 'some_value' , 
LST_CHG_TMS = CURRENT TIMESTAMP 
WHERE SUB_RUN_ID = 111111  
AND INQ_EXE_ID = 12345 ; 

如果我手動運行由上面的代碼生成的sql,它將執行正常。但是,當我嘗試通過休眠來執行它時,會引發'syntaxErrorException'。有任何想法嗎?謝謝

+1

你真的在查詢的末尾有分號嗎?如果是,然後刪除它。 –

+0

HAAA!哦,我的上帝,多麼蠢貨;)就是這樣。有趣的是,當我通過我的Db經理手動執行它時,它與分號一起運行沒有問題。謝謝! – cianBuckley

+0

你的配置中的db2的hibernate方言是什麼? – erencan

回答

5

問題是由查詢結尾處的分號造成的。您使用的PostgreSQL SQL工具需要它,因爲它允許分隔多個查詢,但要通過Java語句執行單個查詢,分號不得存在。