@Query("select t from TimeTable t where MONTH(t.date) = ?1 and YEAR(t.date) = ?2")
List<TimeTable> findAll(Integer month, Integer year);
现在我尝试使用以下名称替换?1和?2
@Query("select t from TimeTable t where MONTH(t.date) =month and YEAR(t.date) =:year")
List<TimeTable> findAll(Integer month, Integer year);
这个不起作用并且会出现错误:
org.springframework.dao.InvalidDataAccessApiUsageException: 参数在该位置 [1] 不存在;嵌套异常是 java.lang.IllegalArgumentException: 参数在该位置 [1] 不存在
还有这个:
@Query("select t from TimeTable t where MONTH(t.date) =:month and YEAR(t.date) =:year")
List<TimeTable> findAll(Integer month, Integer year);
产生错误:
org.springframework.dao.InvalidDataAccessApiUsageException:参数绑定的名称不能为空!在JDKs < 8上,您需要使用@Param进行命名参数,在JDK 8或更高版本上,请确保使用-parameters进行编译。;嵌套异常是java.lang.IllegalArgumentException:参数绑定的名称不能为空!在JDKs < 8中,您需要使用@Param进行命名参数,在JDK 8或更高版本上,请确保使用-parameters进行编译。
更新:
如上所述的错误消息,我不需要在JDK 8上使用@Param,但使用@Param的解决方案有效:
List<TimeTable> findAll(@Param("month") Integer month, @Param("year") Integer year);
当我删除@Params时,会再次出现这个错误。
YEAR(t.date) =:ear")
拼写错误了吗? - krezus