SpringBoot MyBatis Plus框架枚举类型转换到mysql类型报错,仅支持MySQL**的类型默认转换问题
按理说运行工程后,新增的实体类会根据注解内容进行构建数据库的表,不过在构建表的时候就报错了。报错内容如下:表:resource,初始化字段结构失败!字段名:resType不支持classcom.***.enums.ResType类型转换到mysql类型,仅支持JavaToMysqlType类中的类型默认转换,异常抛出!也就是说这里的ResType类型的枚举是没法作为表内字段的转换类型。
问题
问题的原因就是,我定义一个两个参数的枚举类型,用于区分素材的类型:
public enum ResType {
IMAGE(0,"图片"),
VIDEO(1,"视频"),
UNKNOWN(2,"未知");
private int value;
private String des;
ResType(int value, String des) {
this.value = value;
this.des = des;
}
public int getValue() {
return value;
}
public String getDes() {
return des;
}
}
项目采用Springboot + mybatis-plus框架来实现,有这个资源的实体类entity(Resource):
@Data
@EqualsAndHashCode(callSuper = false)
@TableName(value = "resource")
@TableComment("素材数据")
@ApiModel(value = "素材数据")
public class Resource {
@ApiModelProperty(value = "素材名称")
@Column(comment = "素材名称", length = 50)
private String name;
@ApiModelProperty(value = "素材类型")
@Column(comment = "素材类型")
private ResType resType;
@ApiModelProperty(value = "素材地址")
@Column(comment = "素材地址", length = 200)
private String url;
}
按理说运行工程后,新增的实体类会根据注解内容进行构建数据库的表,不过在构建表的时候就报错了。
报错内容如下:
表:resource,初始化字段结构失败! 字段名:resType不支持class
com.***.enums.ResType类型转换到mysql类型,仅支持JavaToMysqlType类中的类型默认转换,异常抛出!
也就是说这里的ResType类型的枚举是没法作为表内字段的转换类型。
解决办法
修改Resource数据实体的Column使其指定为MySqlTypeConstant的类型,这里可以INT也可以TEXT
@ApiModelProperty(value = "素材类型")
@Column(type = MySqlTypeConstant.INT, comment = "素材类型")
private ResType resType;
这样会将ResType 的value值转换成自已定义的type(这里是MySqlTypeConstant.TEXT)存入数据库内。
因为这里枚举只需要简单处理,看到有更灵活的方式就是自定义的枚举处理转换器。后续研究一下再实现吧。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)