• 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、反编译后的实体类

  • 相关阅读:
    docker logs-查看docker容器日志
    初探 Elasticsearch,学习笔记第一讲
    Centos7 环境下设置固定IP
    强制使用索引查询方法
    linux 常用命令
    MySQL 调优
    docker 常用命令
    mysql 创建临时表
    mysql or in union all 使用方法
    mysql 创建存储过程
  • 原文地址:https://www.cnblogs.com/feong/p/13416279.html
Copyright © 2020-2023  润新知