Querydsl: Hibernate5の問題-org.hibernate.exception.SQLGrammarException

作成日 2016年06月28日  ·  5コメント  ·  ソース: querydsl/querydsl

JPAQueryでlimit句を使用

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

これが私が使用したコードのスニペットです:

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

使用しているもの:JBOSS EAP 7 / Wildfly 10 With Hibernate 5.0.7 /5.0.9およびQueryDSLJPA 4.1.2
JDBCドライバー:MSSQLServer用のJTDS1.3

resolved

最も参考になるコメント

これは、QuerydslではなくHibernateの問題のように見えます。 ページングパラメータのレンダリングについては、org.hibernate.dialect.SQLServerDialectを確認してください。

全てのコメント5件

完全なSQLを提供できますか?

生成されるクエリは次のとおりです。

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 '!'

hibernate 4.3ではが表示されないため、 TOPパラメーターを使用したものだと思います クエリログ内の文字は、代わりに、 limit()メソッドに入れた数を示します。

これは、QuerydslではなくHibernateの問題のように見えます。 ページングパラメータのレンダリングについては、org.hibernate.dialect.SQLServerDialectを確認してください。

あなたが正しい。 org.hibernate.dialect.SQLServer2012Dialectに変更したところ、エラーが表示されなくなりました。
ありがとうございました。

素晴らしい。

このページは役に立ちましたか?
0 / 5 - 0 評価