使用单引号替换方法时Hibernate session.createQuery错误

时间:2012-08-13 06:53:17

标签: java mysql hibernate jsf

我遇到了非常典型的问题。我动态生成的查询就像这样...

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( - 我的查询 - )如果发生错误 QueryTranslatorException

Database : Mysql 5.3

有人遇到过这个问题吗? 提前谢谢。

2 个答案:

答案 0 :(得分:3)

尝试在Hibernate中将其作为本机SQL查询运行:

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

因为如果你使用

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

Hibernate将尝试将其作为HQL查询执行,这与通常的SQL查询不同。

HQL是面向对象的查询语言。它根据对象而不是表格来操作。 Here posted a brief description SQL和HQL之间的区别。但是,如果您有时间更好地阅读有关HQLNative SQL用法的hibernate文档的相应部分。

答案 1 :(得分:2)

如果您想在休眠状态下执行SQL Query,请使用:session.createSQLQuery(String query);