通过Hibernate的createSQLQuery()运行SQL时出错

时间:2014-09-11 08:02:33

标签: sql hibernate

使用hibernate 3.2.1(不能改为现代版)

我希望通过它的属性来获取DB的实体'代码'没有气体。我尝试使用以下查询

    return (Good) getSession().createSQLQuery("from Good where REPLACE(code, \" \", \"\")=?").setString(0, code).uniqueResult();

但我有例外。

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from Good where REPLACE(code, " ", "")='AG221'' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2293)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1778)
at org.hibernate.loader.Loader.doQuery(Loader.java:662)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
at org.hibernate.loader.Loader.doList(Loader.java:2211)
... 58 more

我会对任何建议表示感谢。

2 个答案:

答案 0 :(得分:0)

您生成一个SQLQuery。你必须从select

开始
return (Good) getSession().createSQLQuery("select * from Good where REPLACE(code, \" \", ...

答案 1 :(得分:0)

createSQLQuery将返回SQLQuery以执行本机SQL查询。见"Using a SQLQuery"。所以 请尝试使用 createQuery 进行HQL。

return (Good) getSession().createQuery("from Good where REPLACE(code, \" \", \"\")=?").setString(0, code).uniqueResult();