Java JPA 报java.lang.IllegalArgumentException: Validation failed for query for method public abstract ...异常的一种原因和解决办法

背景

JDK版本:1.8

框架:SpringBoot 2.x

ORM:JPA

异常

全部的异常信息没有贴出来,太多了,关键就下面这一句

java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.lang.Integer com.ess.fsjs.useWaterPlan.dao.PlanTotalIndicatorsDao.queryMaxPlanYear()!

从这个异常信息上看,提示的比较泛,只是说查询验证失败,有多种错误可能都会出现这个提示。

找到具体的报错方法,即:com.ess.fsjs.useWaterPlan.dao.PlanTotalIndicatorsDao.queryMaxPlanYear(),看下代码:

/**
 * 查询有计划指标总量的最大年份
 * @return
 */
@Query(value = "select max(plan_year) from t_plan_total_indicators")
Integer queryMaxPlanYear();

很简单的一个查询,使用了原生SQL,可以看出SQL没有问题。JPA使用原生SQL语句时,需要nativeQuery = true,所以问题就出在这里,加上就好了。

修改后的代码:

/**
 * 查询有计划指标总量的最大年份
 * @return
 */
@Query(value = "select max(plan_year) from t_plan_total_indicators", nativeQuery = true)
Integer queryMaxPlanYear();
原文地址:https://www.cnblogs.com/codecat/p/12096717.html