2016-08-08 3 views
0

Я использую версию hibernate 4.3.11.Final и 1.0.0.Final. hibernate.dilect = org.hibernate.dialect.Oracle12cDialectsetMaxResults (max_size) throws Команда Sql не закончила должным образом исключение

final String hql1 = "select s from " + app.class.getSimpleName() + " s where s.Id = " + getId(); 
When i'm calling 
mEntityManager.createQuery(hql1, app.class).setMaxResults(3); 

генерируется HQL = "выберите app_.ID, как ID6_157_ из test.APP_TABLE app_ где app_.ID = 83700 FETCH FIRST? Строки только"

Problme, который кажется '?' не заменяется значением 3 setMaxResults, но не может понять, как его исправить. Это бросает исключение: -

java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended 

oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445) 
oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396) 
oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:879) 
oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:450) 
oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192) 
oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531) 
oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207) 
oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:884) 
oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1167) 
oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1289) 
oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3584) 
oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3628) 
oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1493) 
com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52) 
com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java) 
org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:80) 
org.hibernate.loader.Loader.getResultSet(Loader.java:2065) 
org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1862) 
org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1838) 
org.hibernate.loader.Loader.doQuery(Loader.java:909) 
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:354) 
org.hibernate.loader.Loader.doList(Loader.java:2553) 
org.hibernate.loader.Loader.doList(Loader.java:2539) 
org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2369) 
org.hibernate.loader.Loader.list(Loader.java:2364) 
org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:496) 
org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:387) 
org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:231) 
org.hibernate.internal.SessionImpl.list(SessionImpl.java:1264) 
org.hibernate.internal.QueryImpl.list(QueryImpl.java:103) 
org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:573) 
org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:449) 

запрос отлично работает, если я удалить setMaxResults (3) от CreateQuery.

Любые предложения, что может быть причиной этого.

+0

выберите app_.ID как ID6_157_ из test.APP_TABLE app_, где app_.ID = 83700 выборка сначала? только строки –

+0

Этот запрос не имеет ничего общего с JPA. Зачем использовать неправильный тег? – ujulu

ответ

0

Проблема не возникает из вопросительного знака. Hibernate будет вводить значение параметра при выполнении запроса.

Кроме того, вы не должны создавать запрос, используя конкатенацию строк. Это должно быть как

entityManager.createQuery("Select s from Apps s where s.id = :id") 
.setParameter(":id", id) 
.setMaxResults(3); 

Я думаю, что проблема в имени таблицы test.APP_TABLE с именем пакета «test.». Вы можете попытаться скопировать сгенерированный запрос и запустить его непосредственно в Oracle, чтобы увидеть результат и выяснить, что такое ошибка.

0

Благодарим вас за ответы. Я понял, исправить мою проблему. Я изменил свой диадему спящего режима на «org.hibernate.dialect.Oracle10gDialect», и моя проблема была исправлена. Спасибо.