db2 org.hibernate.hql.internal.ast.QuerySyntaxException:意外内标识:撷取

wbgh16ku  于 2022-11-07  发布在  DB2
关注(0)|答案(2)|浏览(195)

我正在将一个使用DB2数据库的应用程序从Spring(IBM Websphere)迁移到Springboot(Embedded Tomcat)。
使用hib4.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
启动应用程序时出现以下问题:
异常原因:意外内标识:第1行第255列附近的FETCH

hk8txs48

hk8txs481#

您可以使用对等的陈述式:

@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
jjjwad0x

jjjwad0x2#

来自另一个帖子:unexpected token: LIMIT
基本上,您的查询应该是原生的:

`@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", nativeQuery = true)`

请注意结尾处的nativeQuery。默认情况下,nativeQuery为false。

相关问题