在使用JPA和Spring时,如何更改java.lang.Enum的序数?

时间:2014-04-27 15:26:17

标签: java spring hibernate jpa enums

实体:

@Entity
@Table(name = "table_name")
public class MyClass extends IdEntity {
    private MyEnumType enumType;

    @Enumerated(EnumType.ORDINAL)
public MyEnumType getEnumType() {
    return enumType;
}

public void setEnumType(MyEnumType enumType) {
    this.enumType= enumType;
}
}

Enum:

public enum MyEnumType {
    DOG(11),CAT(13),BULL(20);
    private int value;
    private MyEnumType (int value) {
    this.value= value;
}
    public int getValue() {
    return value;
}
public void setValue(int value) {
    this.value= value;
}
}

主要代码:

//any code then ...
entity.setsEnumType(MyEnumType.CAT);
//...persist API 

我想在数据库中保留cat的int值( 13 )(例如mysql)。但是在mysql中,enumType是( 1 ),是什么ORDINAL值。我想知道有没有办法通过JPA和spring ???

存储我的自定义值

有这样的方式:

change "private MyEnumType enumType;" to "private **int** enumType;"

然后:

entity.setsEnumType(MyEnumType.CAT.getValue());

但我不喜欢这个。

1 个答案:

答案 0 :(得分:1)

JPA 2.1允许以标准方式定义自定义类型。使用@Convert注释。有关解释,请参阅http://www.thoughts-on-java.org/2013/10/jpa-21-how-to-implement-type-converter.html,javadoc是不够的。

如果你还在使用JPA 2.0,那么Hibernate有一种定义custom types的专有方式。