问题

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

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

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

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐