2012-08-13 42 views
2

我得到了非常典型的問題。我這樣動態生成的查詢是這樣的...Hibernate session.createQuery錯誤,而用單引號替換方法

UPDATE Templates t SET t.TEMPLATE_DATA = replace(t.TEMPLATE_DATA, 'Test\'s Test', 'Kent"s Test'), t.TEMPLATE_DATA = replace(t.TEMPLATE_DATA, 'Test"s Test', 'Kent"s Test'), UPDATE_DATE = NOW() where PRACTICE_ID = 1 AND CATEGORY_ID IN (1) 

這工作完美時,我明確地在DB啓動此查詢。但通過使用hibernate的session.createQuery( - 我的查詢 - )如果thwows錯誤QueryTranslatorException

Database : Mysql 5.3 

有沒有人遇到過這個問題? 在此先感謝。

回答

3

嘗試在Hibernate作爲原生SQL查詢運行如下命令:

session.createSQLQuery(-- query text --); 

因爲如果你使用

session.createQuery(-- query text --); 

休眠將嘗試將其作爲與常規SQL查詢不同的HQL查詢來執行。

HQL是面向對象的查詢語言。它根據對象而不是表格進行操作。 SQL和HQL之間差異的Here posted a brief description。但是如果你有更好的時間來閱讀關於HQLNative SQL用法的hibernate文檔的適當部分。

+0

哦,你們倆都是對的。謝謝。 但我真的想明白兩者有什麼區別?順便說一句,它是HQL或簡單的SQL都在同一個後端MySql上觸發。即使這很重要嗎? – Ketan 2012-08-13 07:06:41

+0

是的!因爲HQL和SQL有不同的語法。 HQL是在類級別和SQL是表級別 – 2012-08-13 07:11:13

+0

我編輯我unswer。您可以在這裏找到HQL和SQL之間差異的簡要說明。 – dimas 2012-08-13 07:15:34