Hibernate char 列枚举

Hibernate char column to enum

我将列 'gender' 作为 VARCHAR(1)/CHAR。 如何在不使用

的情况下将值 "M"/"F" 解析为 @Entity class 中具有值(MALE,FEMALE)的 java 枚举
@Column(name="gender")
private Character cGender;

并手动将其转换为枚举对象?

您需要提供自己的转换器:

@Convert(converter = GenderConverter.class)
@Column(name="gender")
private Gender gender;

然后实施

public class GenderConverter implements AttributeConverter<Gender, Character> {
    @Override
    public Character convertToDatabaseColumn(Gender from) {

        Character value = 'm';

        if (from == Gender.FEMALE) {
            value = 'f';
        }

        return value;
    }

    @Override
    public Gender convertToEntityAttribute(Character to) {
        Gender g = Gender.MALE;
        if ('f' == to)
            g = Gender.FEMALE;
        }
        return g;
    }
}

对于枚举,您可以使用枚举类型来代替使用字符类型,例如:

@Enumerated(EnumType.STRING)
@Column(name = "GENDER")
private Gender gender; 

除了@Alexey Soshin 的回答: 也可以在转换器 class 上添加 @Converter(autoApply = true) ,之后 Hibernate 将自动转换所有 Gender 字段(不需要 @Convert(converter = GenderConverter.class)).