JPA使用in查詢只能查詢到第一個參數結果的坑


錯誤前:

@Service
String ids = "1,2,3,4,5";
this.UserDao.getUsers(ids);

@Repository
//報錯
/*
org.springframework.dao.InvalidDataAccessApiUsageException: 
Parameter value [1,2,3,4] did not match expected type [java.lang.Integer (n/a)]; 
nested exception is java.lang.IllegalArgumentException: 
Parameter value [1,2,3,4] did not match expected type [java.lang.Integer (n/a)]
*/
@Query("SELECT s from User s WHERE s.id IN(:ids)")
List<User> getUsers(@Param("ids") String ids);

//強行執行自定義sql
@Query(nativeQuery = true, value = "SELECT * from User WHERE id IN(?1)")
List<User> getUsers(@Param("ids") String ids);

強行執行自定義sql之后,你會發現,結果和預期不一致
放到sqlyog里面執行自定義sql
SELECT * from User WHERE id IN(1,2,3,4,5);
發現結果沒錯。錯在哪里嗎?
放到sqlyog里面執行
SELECT * from User WHERE id IN(”1,2,3,4,5“);
結果和程序神奇的一致,只查詢id=1的一條記錄,問題就在這里,有引號!!!

  

修改后:

@Service
String ids = "1,2,3,4,5";
List<Integer> userIds = new ArrayList<>();
String[] userArray = ids.split(",");
for(String id : userArray){
    userIds.add(Integer.parseInt(id));
}
this.UserDao.getUsers(userIds);

@Repository
@Query("SELECT s from User s WHERE s.id IN(:ids)")
List<User> getUsers(@Param("ids") List<Integer> ids);

問題解決!!!

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 入Lucene的第一個坑 mybatis中union可以用if判斷連接,但是