通过API更新枚举

时间:2018-06-12 10:40:25

标签: java hibernate jpa enums orm

我想更新枚举值运行时。我正在使用JPA和当前有一个枚举

Country

在实体中使用此枚举为:

public enum ColorEnum
{
    A, B, C
}

它的工作但是如果有要求,我想在将来提供一个api来添加新的Enum'D'。在那种情况下,创建实体的最佳方法是什么?有没有办法改变枚举?

2 个答案:

答案 0 :(得分:2)

实现此目的的方法是使用界面。

interface Colour
{
    String getHex(); // or whatever a colour does 
}

然后您可以声明默认颜色:

enum DefaultColour implements Colour
{
    RED("ff0000"),
    BLUE("0000ff");

    private final String hex;

    DefaultColour(String hex) { this.hex = hex; }

    @Override
    public String getHex() { return hex; }
}

然后当有人想要添加其他颜色时,他们可以实现相同的界面:

class Gold implements Colour {
    //...
}

或提供完整清单:

enum AdditionalColour implements Colour {
    YELLOW("..."),
    GREEN("...");

    //...
}

我会在运行时使用service provider interface来提供额外的颜色。

答案 1 :(得分:1)

  

枚举旨在成为具有常量感的静态,最终,不可变,实例控制的对象[...]

我建议使用String或代表你的颜色的可序列化类(如RBG值)并坚持使用。

@Entity
@Table(name = "color")
public class ColorEntity implements Serializable {

    @Enumerated(EnumType.STRING)
    @Column(name = "red", nullable = false)
    private int red;

    @Enumerated(EnumType.STRING)
    @Column(name = "green", nullable = false)
    private int green;

    @Enumerated(EnumType.STRING)
    @Column(name = "blue", nullable = false)
    private int blue;

    // remainder omitted
}