Java 通过API更新枚举
我想更新枚举值运行时。我正在使用JPA,当前有一个枚举作为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'在未来,如果有需要。在这种情况下,创建实体的最佳方法是什么?是否有任何方
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的最佳方法。