Jpa枚举如何映射到带有空格的列值呢?

时间:2018-07-11 19:36:55

标签: java mysql jpa enums

我在下面的JPA配置中遵循枚举教程。我的JPA已连接到mysql DB。但是,enum列中的某些值在其中包含空格。因此,我创建了一个带有String字段的Java枚举类型来存储这些列值。

问题是,如何使用JPA @Enumerated(Enum.TYPE = String)注释映射此复杂的枚举类型?似乎不起作用。

The Enum example I followed.

我的案例的Enum类型:

public enum Complex {

    VALUE1('value one'),
    VALUE2('value two'),

    private final String name;

    private Complex(String name) {
        this.name = name;

    }


}

2 个答案:

答案 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,并且表中的字段应支持数据类型。