STS使用lombok插件導致的Error attempting to get column 'type' from result set


1、拉取一個項目的代碼在本地運行,調用接口時報錯:

org.springframework.dao.DataIntegrityViolationException: Error attempting to get column 'type' from result set.  Cause: java.sql.SQLDataException: Cannot determine value type from string 'org'

; Cannot determine value type from string 'org'; nested exception is java.sql.SQLDataException: Cannot determine value type from string 'org'

       at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:84)

       at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)

       at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)

       at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:88)

       at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)

 

 2、百度一下這個報錯,說是實體類屬性與數據庫字段類型不一致引起的。檢查一下實體類中這個報錯的屬性和數據庫字段類型一致的(其他同事的環境都能正常訪問接口)。

由於項目中引入了lombok,所以看了一下項目引入的版本號(1.16.22)與本地sts安裝的lombok插件版本(很早之前安裝的1.16.8)不一致。

 

3、更改sts的lombok插件版本並反編譯進行比較,發現使用lombok 1.16.22反編譯后的代碼並1.16.8多一個private的無參構造函數(1.16.8只有一個全部屬性的構造函數)。sts換成lombok1.16.22后接口調用正常,不再報錯。

3.1、實體類:

  3.2、使用lombok 1.16.22反編譯后的代碼

  

 

 4、lombok 1.16.22比1.16.8多了這個private構造函數的功能??那去實錘一下!

 

 5、沒有無參構造函數時,mybatsi為啥報這個錯誤呢?

5.1、此時只有一個包含全部屬性的構造函數,mybatis就會找出這些屬性對應的值,並實例化一個實體類對象

5.2、在找屬性對應的值時,mybatis會按照實體類全屬性的構造函數的入參順序,與sql的查詢結果對應,如果實體類的屬性和sql結果列不能匹配時都會報錯。

 

6、報錯解決方式

6.1、方式一:保持STS插件lombok版本與項目中的lombok版本一致

6.2、方式二:在實體類中加入下圖中的2個lombok注解,使編譯后的類有public的無參函數(推薦)

6.2.1、實體類中加入2個lombok注解,聲明生成無參構造函數

 6.2.2、反編譯后的實體類


免責聲明!

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



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