內容簡介
今天遇到一個異常,報出消息為SQL Error: 0, SQLState: S1009,Invalid value for getLong() - 'PH',排查問題后,結果令人啞然失笑,也許Ctrl+C,Ctrl+V讓程序員們用的很嫻熟,但Ctrl+V之后還是要細心檢查代碼。
異常
看到這個信息,第一反應是執行SQL出錯了,檢查了參數,數據庫字段的類型定義,沒啥問題,把參數替換后在Navicat中也能執行並有結果
代碼:
@Query(value = "select * from t_water_quality_evaluate where ITMID = :itMid AND WQGLLV < :wqgValue AND WQGULV >= :wqgValue limit 1",nativeQuery = true) TwaterQualityEvaluate queryByItMidAndValue(@Param(value = "itMid") String itMid, @Param(value = "wqgValue") BigDecimal wqgValue);
字段字義:
執行結果:
這是啥問題呢?我們看信息第二句:Invalid value for getLong() - 'PH',問題出現在itMid這個參數上,我們傳入值"PH",這是個varchar類型,卻使用getLong獲取值,趕緊看看實體類的定義:
看到了嗎?定義了Long類型!改為String后就OK了。
這個問題明顯是在編寫實體類時,itMid的定義復制了上面id的代碼,只改了名稱,沒有改類型造成的!
嗯,Ctrl+V之后,還是要細心一些好。