2016-08-08 8 views
0

Ich verwende die Hibernate-Version 4.3.11.Final und 1.0.0.Final. hibernate.dilect = org.hibernate.dialect.Oracle12cDialectsetMaxResults (max_size) löst Sql-Befehl nicht ordnungsgemäß beendet Ausnahme

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); 

erzeugt HQL = "wählen app_.ID als ID6_157_ aus test.APP_TABLE app_ wo app_.ID = 83700 fetch zuerst? Zeilen nur"

Problme, die scheint, ist "?" wird nicht durch den Wert 3 von setMaxResults ersetzt, aber konnte nicht herausfinden, wie es zu beheben ist. Es wirft die Ausnahme: -

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) 

Abfrage funktioniert gut, wenn ich die setMaxResults (3) von der Create entfernen.

Irgendwelche Vorschläge, was der Grund dafür sein könnte.

+0

wähle app_.ID als ID6_157_ aus test.APP_TABLE app_ wo app_.ID = 83700 zuerst holen? Nur Zeilen –

+0

Diese Abfrage hat nichts mit JPA zu tun. Warum ein falsches Tag verwenden? – ujulu

Antwort

0

Das Problem kommt nicht von dem Fragezeichen. Hibernate fügt den Parameterwert beim Ausführen der Abfrage ein.

Darüber hinaus sollten Sie die Abfrage nicht mithilfe von Zeichenfolgenverkettung erstellen. Es sollte wie sein

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

Ich denke, das Problem ist der Tabellenname test.APP_TABLE mit dem Paketnamen "test.". Sie können versuchen, die generierte Abfrage zu kopieren und direkt in Oracle auszuführen, um das Ergebnis zu sehen und herauszufinden, was der Fehler ist.

0

Vielen Dank für Ihre Antworten. Ich habe die Lösung für mein Problem gefunden. Ich habe meinen Hibernate-Dialekt in "org.hibernate.dialect.Oracle10gDialect" geändert und mein Problem wurde behoben. Danke.

Verwandte Themen