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)

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

 

 2、百度一下这个报错,说是实体类属性与数据库字段类型不一致引起的。检查一下实体类中这个报错的属性和数据库字段类型一致的(其他同事的环境都能正常访问接口)。

由于项目中引入了lombok,所以看了一下项目引入的版本号(1.16.22)与本地sts安装的lombok插件版本(很早之前安装的1.16.8)不一致。

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

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

 

3、更改sts的lombok插件版本并反编译进行比较,发现使用lombok 1.16.22反编译后的代码并1.16.8多一个private的无参构造函数(1.16.8只有一个全部属性的构造函数)。sts换成lombok1.16.22后接口调用正常,不再报错。

3.1、实体类:

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

  3.2、使用lombok 1.16.22反编译后的代码

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

 

 4、lombok 1.16.22比1.16.8多了这个private构造函数的功能??那去实锤一下!

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

 

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

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

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

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

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

 

6、报错解决方式

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

6.2、方式二:在实体类中加入下图中的2个lombok注解,使编译后的类有public的无参函数(推荐)

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

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

 6.2.2、反编译后的实体类

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

相关文章: