在定义完实体类以后, 使用mybaties的主键查询实体类,一查就报错,说无法将字符串格式转换为时间类型,仔细检查了一遍,类型并没有问题,于是尝试将Timestamp的字段去掉再看,仍然报无法将字符串格式转换为Integer类型,基本可以确定问题出在了实体类上。
错误信息如下
2022-04-13 16:11:49.039 [http-nio-8080-exec-1] ERROR c.t.s.m.exceptionadvice.EcrExceptionHandler - [EcrExceptionHandler.java:192] - 出现异常的类为:org.mybatis.spring.MyBatisExceptionTranslator 方法为:translateExceptionIfPossible 第77行 异常信息:{}
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='createTime', mode=IN, javaType=class java.sql.Timestamp, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #8 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: java.lang.ClassCastException: java.lang.String cannot be cast to java.sql.Timestamp
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:77)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)
at com.sun.proxy.$Proxy135.selectOne(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:166)
实体类
`package com.tianwen.springcloud.microservice.base.entity.content;
import com.tianwen.springcloud.commonapi.base.BaseEntity;
import com.tianwen.springcloud.commonapi.cache.CacheObject;
import com.tianwen.springcloud.commonapi.cache.DataType;
import com.tianwen.springcloud.microservice.base.util.BaseRedisKeyUtil;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.data.annotation.Id;
import javax.persistence.*;
import lombok.EqualsAndHashCode;
import java.sql.Timestamp;
/**
- 资源表
- @author xiaozan
- @version [版本号, 2022年3月28日]
- @see [相关类/方法]
- @since [产品/模块版本]
*/
@Data
@Table(name = “t_e_content”)
@EqualsAndHashCode(callSuper = true)
@CacheObject(timeout = 86400000, prefix = BaseRedisKeyUtil.COMMONKEY, name = “t_e_content”, keys = {“contentId”}, type = DataType.STRING)
public class Content extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY, generator = "SELECT nextval('seq_contentid_t_e_content')")
@ApiModelProperty(value = "资源ID")
@Column(name = "contentid")
private String contentId;
@ApiModelProperty(value = "资源名称")
@Column(name = "contentname")
private String contentName;
}`
最终经过对比发现:
我在主键上使用的@ID注解,是单独引入的,来自于 org.springframework.data.annotation.Id;
javax.persistence.*; 这个里面就包含有@ID 的注解实现,而且@Table,@Column也都是来自于这个包。
解决办法:
去掉这一行就可以了。
import org.springframework.data.annotation.Id;