2016-08-08 3 views
0

私は、休止状態のバージョン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 = "test.APP_TABLEからID6_157_としてapp_.ID選択がapp_ app_.ID = 83700最初のフェッチ?行のみ"

そう思われるProblmeは '?' setMaxResultsの値3に置き換えられていませんが、それを修正する方法を理解できませんでした。 それは例外を投げます: - 私はからCreateQueryから(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) 

クエリは、正常に動作します。

何が原因である可能性がありますか。

+0

test.APP_TABLE app_からapp_.IDをID6_157_として選択します.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」に変更しましたが、私の問題は修正されました。おかげさまで

関連する問題