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