Spring Boot 版本:2.1.2.RELEASEH2 版本:1.4.197通過 JpaRepository 查詢:@Repositorypublic interface PlayerStorage extends JpaRepository<Player, Long> { List<Player> findByUid(@Param("uid") List<Integer> uid);}...List<Player> foundByUids = playerStorage.findByUid(Arrays.asList(100, 200));Spring 生成并執行查詢:Data conversion error converting "(100, 200)"; SQL statement:select player0_.id as id1_3_, player0_.uid as uid3_3_ from player player0_ where player0_.uid=(100 , 200)[22018-197]...Caused by: java.lang.NumberFormatException: For input string: "(100, 200)"at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)at java.lang.Integer.parseInt(Integer.java:569)at java.lang.Integer.parseInt(Integer.java:615)at org.h2.value.Value.convertTo(Value.java:1061)H2 說:DATA_CONVERSION_ERROR_1 = 22018The error with code 22018 is thrown when trying to convert a value to a data type where the conversion is undefined, or when an error occurred trying to convert.Example:CALL CAST(DATE '2001-01-01' AS BOOLEAN);CALL CAST('CHF 99.95' AS INT);如果我嘗試直接從 H2 Web 控制臺執行此查詢,我會得到相同的結果。如果我做對了,問題就出在聲明中:player0_.uid=(100 , 200). 與in 相同的查詢player0_.uid in (100 , 200)可以從 Web 控制臺正常執行。我也有 H2 的彈簧靴屬性:spring.datasource.driver-class-name=org.h2.Driverspring.jpa.database=H2spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
2 回答

眼眸繁星
TA貢獻1873條經驗 獲得超9個贊
錯誤可能在存儲庫代碼中:
public interface PlayerStorage extends JpaRepository<Player, Long> {
List<Player> findByUid(@Param("uid") List<Integer> uid);
}
從文檔中它應該是:
public interface PlayerStorage extends JpaRepository<Player, Long> {
List<Player> findByUidIn(@Param("uid") List<Integer> uid);
}
還:
如果“uid”是 Player 中的字段,則不需要 @Param
@Repository 也是多余的
我建議添加一些驗證,以確保傳遞給方法的列表不為空,否則會導致異常。
添加回答
舉報
0/150
提交
取消