在使用mybatis时,出现数据转换异常
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: Error attempting to get column ‘create_time’ from result set. Cause: java.sql.SQLDataException: Unsupported conversion from TIMESTAMP to java.lang.Long
; Unsupported conversion from TIMESTAMP to java.lang.Long; nested exception is java.sql.SQLDataException: Unsupported conversion from TIMESTAMP to java.lang.Long] with root cause
com.mysql.cj.exceptions.DataConversionException: Unsupported conversion from TIMESTAMP to java.lang.Long
问题分析
检查发现是由于缺少无参构造方法导致的。mybatis默认先使用默认构造方法构造对象,然后再用的getter和setter来完成实体类和表的映射。如果不存在无参构造方法,则按顺序映射数据库表的和实体类的构造方法的参数,而忽略字段名,因此会误将id赋值给downLinkData,将create_time赋值给upLinkData,导致抛出Unsupported conversion from TIMESTAMP to java.lang.Long。
解决方案
以下三种方法都能解决
1.新增一个无参构造方法
2.新增一个包含所有成员变量的构造方法
3.删除原来的构造方法
发表回复