将枚举存储在数据库中

时间:2018-11-23 16:25:09

标签: java database jpa

我被要求在名为Typevarchar2(1)的列中添加一个值partialall

我在 Model.Java

中所做的
    @Column(name="TYPE")
    @Enumerated(EnumType.STRING)
    public TypeEnum getType() {
        return type;
    }

    public void setType(TypeEnum type) {
        this.type = type;
    }

这是我的 TypeEnum.java

public enum TypeEnum {
    ALL(0, "all"),
    PARTIAL(1, "partial");

    private int code;
    private String value;

    private TypeEnum(int code, String value) {
        this.code = code;
        this.value = value;
    }

    public String getValue() {
        return value;
    }

    public int getCode() {
        return code;
    }

    public static TypeEnum getTypeEnum(String value){
        TypeEnum[] types = values();
        for(int i=0; i<types.length; i++){
            TypeEnum type = types[i];
            if(value.equals(type.getValue()))
                return type;
        }
        return null;
    }

}

那么如何将TypeEnum存储在数据库中以实现varchar2(1)

2 个答案:

答案 0 :(得分:0)

您可以使用Converter自己将枚举映射到varchar(1)。像这样:

@Column("TYPE") @Convert(TypeEnumToString.class) TypeEnum type;

使用转换器类实现了以下内容:

public class TypeEnumToString implements AttributeConverter<TypeEnum, String> {
  @Override
  public TypeEnum convertToEntityAttribute(String value) {
    // return conversion;
  }
  @Override
  public String convertToDatabaseColumn(TypeEnum value) {
    // return conversion;               
  }
}

答案 1 :(得分:0)

您可以通过实现AttributeConverter<TypeEnum, String>

@Converter
public class TypeEnumConverter implements AttributeConverter<TypeEnum, String> {

    @Override
    public String convertToDatabaseColumn(TypeEnum attribute) {
        return String.valueOf(attribute.getCode());
    }

    @Override
    public TypeEnum convertToEntityAttribute(String dbData) {
        return getTypeEnumFromCode(parseInt(dbData));
    }
}

getTypeEnumFromCode的实现方式类似于您的getTypeEnum方法。

然后,将其定义为

@Column("TYPE")
@Convert(TypeEnumToString.class)
TypeEnum type;

p.s。我只是从您的枚举中使用了code,但是它也可以是任何其他逻辑。