I have column 'gender' as a VARCHAR(1)/CHAR. How to parse values "M"/"F" to java enum with values (MALE, FEMALE) in @Entity class without using
@Column(name="gender")
private Character cGender;
and converting it manually to enum object?
You need to provide your own converter:
@Convert(converter = GenderConverter.class)
@Column(name="gender")
private Gender gender;
Then implement it
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;
}
}
For enum you can use enum type instead to use Character type, eg:
@Enumerated(EnumType.STRING)
@Column(name = "GENDER")
private Gender gender;
In addition to the answer of @Alexey Soshin: Also it's possible to add @Converter(autoApply = true) on coverter class and after that Hibernate will be converting all Gender fields automatically (no need for @Convert(converter = GenderConverter.class)).