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