org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:FETCH

时间:2019-11-18 13:23:31

标签: java spring-boot spring-data-jpa db2

我正在将使用DB2数据库的应用程序从Spring(IBM Websphere)迁移到Springboot(Embedded Tomcat)。

使用休眠 4.1.9.Final 的现有应用程序可以通过以下FETCH查询完美运行:

@Query(
"SELECT ssss FROM SSSSPackageDiscountLoad ssss, SSSBasicLoad ttt WHERE ssss.schemeId = ttt.id AND ttt.code = :schemeCode AND "
+ "ssss.ruleCode = :ruleCode ORDER BY ssss.effDate DESC FETCH FIRST 1 ROWS ONLY")

已迁移的springboot(版本 2.1.7.RELEASE )应用使用了休眠 5.3.10.Final

启动应用程序会给我这个问题:

  

由于:org.hibernate.hql.internal.ast.QuerySyntaxException:   意外令牌:FETCH在第1行第255列附近

1 个答案:

答案 0 :(得分:0)

您可以使用等效的语句:

@Query(
"SELECT ssss FROM SSSSPackageDiscountLoad ssss, SSSBasicLoad ttt WHERE ssss.schemeId = ttt.id AND ttt.code = :schemeCode AND "
+ "ssss.ruleCode = :ruleCode ORDER BY ssss.effDate DESC LIMIT 1")

但是,如果您想按原样使用查询,则需要按照建议的here强制使用方言。

在您的情况下,这应该可行:

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.DB2Dialect