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

Posted feong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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构造函数的功能??那去github确认一下吧,果然!

技术图片

 

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

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

技术图片

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

技术图片

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

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

技术图片

 

6.2、反编译后的实体类

技术图片

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

以上是关于STS使用lombok插件导致的Error attempting to get column 'type' from result set的主要内容,如果未能解决你的问题,请参考以下文章

STS中如何使用lombok

解决IDEA与lombok插件不兼容导致的@注解不可用的问题

SpringToolSuit(STS)添加了Lombok后仍然报错

当我通过maven添加依赖时,为什么lombok不起作用?

踩坑-编译错误:FastJson与lombok导致找不到符号:方法getId()

lombok.Getter cheated me