今天使用@Query自定義查詢語句,出現了一個錯誤:
1 java.lang.IllegalArgumentException: Parameter with that position [1] did not exist 2 at org.hibernate.jpa.spi.BaseQueryImpl.findParameterRegistration(BaseQueryImpl.java:502) 3 at org.hibernate.jpa.spi.BaseQueryImpl.setParameter(BaseQueryImpl.java:692) 4 at org.hibernate.jpa.spi.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:181) 5 at org.hibernate.jpa.spi.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:32)
原因是我再使用“?”占位符的時候,出現了錯誤,錯誤代碼如下:
1 @Query("SELECT id " + 2 "FROM AbcClass " + 3 "WHERE p2 like '%?1%'") 4 List<Integer> findP1ByP2(String p2);
“?”占位符應該是獨立使用的,不能放在字符串中間的,上面的改正后就正常了:
1 @Query("SELECT id " + 2 "FROM AbcClass " + 3 "WHERE p2 like ?1") 4 List<Integer> findP1ByP2(String p2);
備注:
查詢條件 | 對應的數據類型 |
=,<>,>,<,like等 | Integer,String |
IN | Collection<?> |