今天代码编译的时候报了这么一个错:
java.lang.IllegalArgumentException: Name for parameter binding must not be null or empty! On JDKs < 8, you need to use @Param for named parameters, on JDK 8 or better, be sure to compile with -parameters.
at org.springframework.util.Assert.hasText(Assert.java:181)
我看了又看,不对啊,往常这么写没问题啊!怎么偏偏到这就有问题了。我把一切归结于今天系统重装,很多配置文件都没有了,所以出错了。后来才知道,不仔细阅读提示就改bug是多么的愚蠢!
人家那明明都写了:On JDKs < 8, you need to use @Param for named parameters, on JDK 8 or better, be sure to compile with -parameters.
可是咱就是不看啊!这谁有办法
我百度了好久,说吧=:换成=?1就行了。嗯,的确行了。但是为啥呢?因为人家写了啊!On JDKs < 8, you need to use @Param for named parameters, on JDK 8 or better, be sure to compile with -parameters.
废话不多说,先上错误写法:
@Query(value = "select * from order where order_no=orderno ",nativeQuery = true)
Order findByOrderNo(String orderno);
正确的写法:
@Query(value = "select * from order where order_no=orderno ",nativeQuery = true)
Order findByOrderNo(@Param("orderno") String orderno);
考验你眼力劲儿的时候来了,这俩有啥区别,看出来没有?没看出来?再好好看看!睁大眼睛好好看!
所以,要么你加上@Param注解,要么你就用?1,比如
@Query(value = "select * from order where order_no=?1 ",nativeQuery = true)
Order findByOrderNo(String orderno);
OK了不?OK了