org.springframework.dao.DataIntegrityViolationException: Error attempting to get column 'createtime' from result set. Cause: java.sql.SQLDataException: Unsupported conversion from TIMESTAMP to java.lang.Byte
; Unsupported conversion from TIMESTAMP to java.lang.Byte; nested exception is java.sql.SQLDataException: Unsupported conversion from TIMESTAMP to java.lang.Byte
at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:84)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
..........
一个很简单的SQL查询,sql是没有问题。但是 一直报错。。问题出在@Data这注解上。

原因:mybatis在 select * from table 然后映射到实体类的时候,会通过反射实例化,
在mybatis-3.5.0.jar 包中org.apache.ibatis.executor.resultset.DefaultResultSetHandler.createByConstructorSignature(ResultSetWrapper, Class<?>, List<Class<?>>, List<Object>, String)这个方法 就是 通过构造函数实例化。但是有@Data注解,没有无参构造函数,只有全部参数的构造函数。。在sql的字段顺序和这构成函数顺序不一致,就会报错。

解决办法 :1、加上无参构造的注解。,或者自己写个无参构造函数,,mybatis在实例化对象的时候,(会选择第一个构造函数)

还有问题,就在无参构造函数上加上注解@AutomapConstructor 。。mybatis会选择带这个注解的构造函数

本文探讨了在使用MyBatis框架时遇到的一个常见问题:由于实体类使用了@Data注解导致的DataIntegrityViolationException异常。详细解析了错误原因在于构造函数实例化时字段顺序不匹配,并提供了添加无参构造函数或使用@AutomapConstructor注解的解决方案。

380

被折叠的 条评论
为什么被折叠?



