iBatis查詢時報"列名無效"或"找不到欄位名稱"無列名的錯誤原因及解決方法


iBatis會自動緩存每條查詢語句的列名映射,對於動態查詢字段或分頁查詢等queryForPage, queryForList,就可能產生“列名無效”、rs.getObject(object)異常錯誤。

當出現動態改變查詢列,或者其他方式動態改變的時候,都需要設置remapResults="true"這個屬性,因此不至於出現“列名無效”的錯誤。其實,這個錯誤拋出的地方是resultSet.getString(“xx”);方法,因為iBATIS保留了第一次的列名,所以第二次查詢的時候resultSet獲得的還是第一次保留下來的列名。



解決辦法:

在SQL語句上加一個屬性(remapResults)配置讓每次執行都重新映射列名。

注:僅在可能被queryForPage()和queryForList()都調用、或者動態字段的SQL語句上加此屬性。(以犧牲性能為代價,損耗很小很小)。

如下所示: 

<select id="queryPartyRole" parameterClass="long" resultClass="java.util.HashMap" remapResults="true"></select>

 

 
 


免責聲明!

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



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM