2014-09-11 4 views
1

используя спящий режим 3.2.1 (не может быть изменен в современной версии)Ошибка при выполнении SQL с помощью createSQLQuery в Hibernate()

Я хочу, чтобы получить объект из БД по его свойства «код» без spases. Я стараюсь сделать это со следующим запросом

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 

Буду благодарен за любые советы.

+1

createSQLQuery() ожидает полного, действительного оператора SQL, но вы предоставляете только фрагмент. – sleske

+0

Кроме того, это не имеет ничего общего с JSF. Отредактировано. – sleske

ответ

0

Вы создаете SQLQuery. Вы должны начать с select

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

createSQLQuery возвратит SQLQuery для выполнения нативных запросов SQL. см. "Using a SQLQuery". поэтому попробуйте с createQuery для HQL.

return (Good) getSession().createQuery("from Good where REPLACE(code, \" \", \"\")=?").setString(0, code).uniqueResult(); 
Смежные вопросы