You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将枚举默认值的rule值而非枚举名称存入数据库?

解决方案

要实现将枚举对应的rule值存入数据库,而非枚举名称,可借助JPA的AttributeConverter自定义枚举与数据库字段的转换逻辑,具体步骤如下:

1. 补全枚举类的核心方法

原枚举类缺少构造方法、rule的获取方法,以及从rule值反向匹配枚举的逻辑,先补全:

public enum RuleMarkup {
    MANUAL("manual markup"),
    NO_REQUIRED("markup not required");

    private final String rule;

    // 构造方法初始化rule值
    RuleMarkup(String rule) {
        this.rule = rule;
    }

    // 获取枚举对应的rule值
    public String getRule() {
        return rule;
    }

    // 根据数据库返回的rule值,反向查找对应的枚举实例
    public static RuleMarkup fromRule(String rule) {
        for (RuleMarkup markup : RuleMarkup.values()) {
            if (markup.getRule().equals(rule)) {
                return markup;
            }
        }
        throw new IllegalArgumentException("未找到匹配的RuleMarkup枚举:" + rule);
    }
}

2. 实现枚举与数据库字段的转换器

创建转换器类,负责枚举与字符串的双向转换:

import jakarta.persistence.AttributeConverter;
import jakarta.persistence.Converter;

@Converter(autoApply = true) // autoApply=true表示全局生效,也可仅在指定字段单独配置
public class RuleMarkupConverter implements AttributeConverter<RuleMarkup, String> {

    // 将枚举转换为数据库存储的字符串(即rule值)
    @Override
    public String convertToDatabaseColumn(RuleMarkup attribute) {
        return attribute == null ? null : attribute.getRule();
    }

    // 将数据库返回的字符串转换为枚举实例
    @Override
    public RuleMarkup convertToEntityAttribute(String dbData) {
        return dbData == null || dbData.isEmpty() ? null : RuleMarkup.fromRule(dbData);
    }
}

3. 调整实体类的字段注解

移除原有的@Enumerated注解,替换为@Convert指定转换器(若已设置autoApply=true,此步骤可省略):

public class Document {

    @Id
    @Column(name = "id")
    @GeneratedValue
    private Long id;

    @Column(name = "type")
    private Long subjectType;

    @Column(name = "markup")
    @Convert(converter = RuleMarkupConverter.class)
    private RuleMarkup nonRuleMarkup = RuleMarkup.MANUAL;
}

完成以上配置后,保存Document实体时,数据库markup字段会存入manual markup而非枚举名称MANUAL;查询时也会自动将数据库的字符串转回RuleMarkup枚举对象,完全适配枚举字段类型。

内容的提问来源于stack exchange,提问作者Aleksandr Berestov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 23:47:14