Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过API更新枚举_Java_Hibernate_Jpa_Enums_Orm - Fatal编程技术网

Java 通过API更新枚举

Java 通过API更新枚举,java,hibernate,jpa,enums,orm,Java,Hibernate,Jpa,Enums,Orm,我想更新枚举值运行时。我正在使用JPA,当前有一个枚举作为 public enum ColorEnum { A, B, C } 并将实体中的此枚举用作: @Enumerated(EnumType.STRING) @Column(name = "Color_Enum ", nullable = false) private ColorEnum colorEnum ; 它的工作,但我想提供一个api添加新的枚举'D'在未来,如果有需要。在这种情况下,创建实体的最佳方法是什么?是否有任何方

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

public enum ColorEnum
{
    A, B, C
}
并将实体中的此枚举用作:

@Enumerated(EnumType.STRING)
@Column(name = "Color_Enum ", nullable = false)
private ColorEnum colorEnum ;
它的工作,但我想提供一个api添加新的枚举'D'在未来,如果有需要。在这种情况下,创建实体的最佳方法是什么?是否有任何方法可以更改枚举

枚举旨在成为静态的、最终的、不可变的、实例控制的、具有常量意义的对象[…]

我建议使用一个
字符串
或一个表示颜色的可序列化类(如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
}

实现这一点的方法是使用接口

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("...");

    //...
}

我会在运行时使用一个表来提供额外的颜色。

我更愿意建议使用一个参考表来满足这些要求。请删除枚举类型的颜色。它可以是我只想通过向最终用户(管理员)提供API来添加新枚举的任何内容,以便将来他们可以添加新的枚举类型。我正在寻找数据库端和JPA实体端的解决方案。在这种情况下,我应该如何在实体中添加列。让我们删除枚举类型颜色。它可以是我只想通过向最终用户(管理员)提供API来添加新枚举的任何内容,以便将来他们可以添加新的枚举类型。我正在寻找数据库端和JPA实体端的解决方案。在这种情况下,我应该如何在实体中添加列我不理解这个问题<代码>枚举应用于有限集。如果集合是无界的,只需使用
class color{}
存储字符串(或其他)并将
set
存储在某处即可。实际上,我在表中有一列“device”,它可以存储固定值(a、b、c)。但现在我想给管理员特权,这样他们就可以在列定义中添加新值,如“D”,这样每个人都可以添加新设备。现在我准备更改使用枚举的代码。我知道我可以使用新表存储设备类型,并在其他成员插入设备时验证设备类型。所以我在寻找JPA的最佳方法。