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的主要内容,如果未能解决你的问题,请参考以下文章
解决IDEA与lombok插件不兼容导致的@注解不可用的问题
SpringToolSuit(STS)添加了Lombok后仍然报错