Wenn ich die Limit- Klausel mit JPAQuery verwende
Caused by: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:106)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:109)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:95)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:79)
at org.hibernate.loader.Loader.getResultSet(Loader.java:2117)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1900)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1876)
at org.hibernate.loader.Loader.doQuery(Loader.java:919)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:336)
at org.hibernate.loader.Loader.doList(Loader.java:2617)
at org.hibernate.loader.Loader.doList(Loader.java:2600)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2429)
at org.hibernate.loader.Loader.list(Loader.java:2424)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:501)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:371)
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:216)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1326)
at org.hibernate.internal.QueryImpl.list(QueryImpl.java:87)
at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:606)
at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:483)
... 53 more
Caused by: java.sql.SQLException: Incorrect syntax near '<strong i="7">@P0</strong>'.
Hier ist ein Codeausschnitt, den ich verwendet habe:
List<Exame> lista;
QExame exame = QExame.exame;
JPAQuery<Exame> query = new JPAQuery<>(getEntityManager());
lista = query.from(exame)
.where(
exame.nomeExame.like(nome+"%").or(exame.nomeExameASO.like(nome+"%")) )
.limit(11L)
.fetchResults()
.getResults();
Ich verwende: JBOSS EAP 7/Wildfly 10 mit Hibernate 5.0.7/5.0.9 und QueryDSL JPA 4.1.2
JDBC-Treiber: JTDS 1.3 für MSSQL Server
Könnten Sie die vollständige SQL bereitstellen?
Dies ist die generierte Abfrage:
08:06:36,522 INFO [org.hibernate.hql.internal.QueryTranslatorFactoryInitiator] (default task-3) HHH000397: Using ASTQueryTranslatorFactory
08:06:36,726 INFO [stdout] (default task-3) Hibernate:
08:06:36,726 INFO [stdout] (default task-3) select
08:06:36,726 INFO [stdout] (default task-3) count(exame0_.cd_exame) as col_0_0_
08:06:36,726 INFO [stdout] (default task-3) from
08:06:36,726 INFO [stdout] (default task-3) SST.dbo.EXAME exame0_
08:06:36,727 INFO [stdout] (default task-3) where
08:06:36,727 INFO [stdout] (default task-3) exame0_.tx_nome_exame like ? escape '!'
08:06:36,727 INFO [stdout] (default task-3) or exame0_.tx_nome_exame_aso like ? escape '!'
08:06:36,856 INFO [stdout] (default task-3) Hibernate:
08:06:36,857 INFO [stdout] (default task-3) select
08:06:36,857 INFO [stdout] (default task-3) TOP ? exame0_.cd_exame as cd_exame1_1_,
08:06:36,857 INFO [stdout] (default task-3) exame0_.tx_nome_exame as tx_nome_2_1_,
08:06:36,857 INFO [stdout] (default task-3) exame0_.tx_nome_exame_aso as tx_nome_3_1_
08:06:36,857 INFO [stdout] (default task-3) from
08:06:36,857 INFO [stdout] (default task-3) SST.dbo.EXAME exame0_
08:06:36,857 INFO [stdout] (default task-3) where
08:06:36,857 INFO [stdout] (default task-3) exame0_.tx_nome_exame like ? escape '!'
08:06:36,857 INFO [stdout] (default task-3) or exame0_.tx_nome_exame_aso like ? escape '!'
Ich denke, es hat etwas mit dem TOP- Parameter zu ? Zeichen im Abfrageprotokoll, stattdessen wird die Zahl angezeigt, die ich in die Methode
Dies scheint ein Problem mit Hibernate und nicht Querydsl zu sein. Überprüfen Sie org.hibernate.dialect.SQLServerDialect beim Rendern der Paging-Parameter.
Du hast recht. Ich habe zu org.hibernate.dialect.SQLServer2012Dialect gewechselt und der Fehler wurde nicht mehr angezeigt.
Dankeschön.
Groß.
Hilfreichster Kommentar
Dies scheint ein Problem mit Hibernate und nicht Querydsl zu sein. Überprüfen Sie org.hibernate.dialect.SQLServerDialect beim Rendern der Paging-Parameter.