我被要求在名为Type
和varchar2(1)
的列中添加一个值partial
或all
我在 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)
答案 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
,但是它也可以是任何其他逻辑。