我有列'gender'作爲VARCHAR(1)/ CHAR。 如何與@Entity類別值(男,女)解析,而無需使用休眠字符列來枚舉
@Column(name="gender")
private Character cGender;
,並手動將其轉換爲枚舉對象值「M」 /「F」到Java枚舉?
我有列'gender'作爲VARCHAR(1)/ CHAR。 如何與@Entity類別值(男,女)解析,而無需使用休眠字符列來枚舉
@Column(name="gender")
private Character cGender;
,並手動將其轉換爲枚舉對象值「M」 /「F」到Java枚舉?
您需要提供自己的轉換器:
@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;
然後我會得到一個異常:枚舉類[network.models.Gender]的未知名稱值[M]。因爲列值不是枚舉的全名,所以這只是1個字符M/F。 –
是的,你應該使用@Alexey Soshin寫的提供你自己的轉換器。 –
除了@Alexey Soshin的回答: 也可以添加@Converter(aut oApply = true),然後Hibernate會自動轉換所有Gender字段(不需要@Convert(converter = GenderConverter.class))。
是的,你說得對,我建議的方式只會記錄枚舉而不是值。 –
也可以在coverter類中添加@Converter(autoApply = true),然後Hibernate會自動轉換所有Gender字段(不需要@Convert(converter = GenderConverter.class))。 –
@NikolayYashchenko有趣!我想你應該發佈這個作爲替代答案,因爲我不熟悉那 –