SpringBoot MyBatis Plus框架枚举类型转换到mysql类型报错,仅支持MySQL**的类型默认转换问题

发布时间:2023年12月28日

问题

问题的原因就是,我定义一个两个参数的枚举类型,用于区分素材的类型:

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)存入数据库内。
在这里插入图片描述

因为这里枚举只需要简单处理,看到有更灵活的方式就是自定义的枚举处理转换器。后续研究一下再实现吧。

文章来源:https://blog.csdn.net/qq_33789001/article/details/135240112
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。