我在下面的JPA配置中遵循枚举教程。我的JPA已连接到mysql DB。但是,enum列中的某些值在其中包含空格。因此,我创建了一个带有String字段的Java枚举类型来存储这些列值。
问题是,如何使用JPA @Enumerated(Enum.TYPE = String)
注释映射此复杂的枚举类型?似乎不起作用。
我的案例的Enum类型:
public enum Complex {
VALUE1('value one'),
VALUE2('value two'),
private final String name;
private Complex(String name) {
this.name = name;
}
}
答案 0 :(得分:1)
要进入休眠状态,您的枚举中没有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;
未经测试,但可以正常工作并向您显示如何执行此操作。
答案 1 :(得分:0)
您可以发布错误?但是,使用reddit.subreddit("VaporwaveAesthetics")
时,JPA将保留VALUE1或VALUE2,并且表中的字段应支持数据类型。