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
完全な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に変更したところ、エラーが表示されなくなりました。
ありがとうございました。
素晴らしい。
最も参考になるコメント
これは、QuerydslではなくHibernateの問題のように見えます。 ページングパラメータのレンダリングについては、org.hibernate.dialect.SQLServerDialectを確認してください。