我在JPA配置中遵循下面的枚举教程。我的JPA已连接到mysql DB。但是,枚举列中的某些值包含空格。所以我创建了一个带有字符串字段的Java枚举类型来存储这些列值。
问题是,如何使用JPA @Enumerated(Enum.TYPE = String)注释映射这种复杂的枚举类型?它似乎不起作用。
我的案例的枚举类型:
public enum Complex {
VALUE1('value one'),
VALUE2('value two'),
private final String name;
private Complex(String name) {
this.name = name;
}
}发布于 2018-07-12 03:42:44
对于Hibernate,您的枚举中没有name属性,所以这不会像那样工作。您将需要自定义序列化程序/反序列化程序。Hibernate如何知道它应该使用name,而不是像VALUE1那样的字符串形式的枚举,反之亦然?
@Converter
public class ComplexConverter implements AttributeConverter<Complex, String> {
@Override
public String convertToDatabaseColumn(Complex value){
return value.name; //or whatever
}
@Override
public Complex convertToEntityAttribute(String value) {
///// map string to Complex enum somehow
}
}在你的实体中
@Column
@Convert(converter = ComplexConverter.class)
private Complex complex;没有经过测试,但应该可以工作,并向您展示如何做到这一点。
发布于 2018-07-12 07:05:20
你可以发布这个错误吗?但是使用@Enumerated(Enum.TYPE = String),JPA将持久化VALUE1或VALUE2,并且表中的字段应该支持该数据类型。
https://stackoverflow.com/questions/51293060
复制相似问题