Querydsl: Hibernate 5-Problem - org.hibernate.exception.SQLGrammarException

Erstellt am 28. Juni 2016  ·  5Kommentare  ·  Quelle: querydsl/querydsl

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

resolved

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.

Alle 5 Kommentare

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ß.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

devcken picture devcken  ·  6Kommentare

heesuk-ahn picture heesuk-ahn  ·  5Kommentare

svaidya401 picture svaidya401  ·  4Kommentare

beamofsoul picture beamofsoul  ·  6Kommentare

intuitiveminds picture intuitiveminds  ·  8Kommentare