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

时间:2020-08-01 21:36:18   收藏:0   阅读:46

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构造函数的功能??那去github确认一下吧,果然!

技术图片

 

 5、没有无参构造函数时,mybatsi为啥报这个错误呢?

5.1、此时只有一个包含全部属性的构造函数,mybatis就会找出这些属性对应的值,并实例化一个实体类对象

技术图片

5.2、在找属性对应的值时,mybatis会按照实体类全属性的构造函数的入参顺序,与sql的查询结果对应,如果实体类的属性和sql结果列不能匹配时都会报错。

技术图片

6、出现报错后,除了保持STS插件lombok版本与项目中的lombok版本一致外,还可以在实体类中加入下图中的2个lombok注解,反编译后的类有public的无参函数。

6.1、实体类中加入2个lombok注解,声明生成无参构造函数

技术图片

 

6.2、反编译后的实体类

技术图片

 

 

 

 

 

 

 

 

 

 

 

 

 

 

根据构造函数的入参顺序,与查询结果值顺序进行一一绑定

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!