我有许多包含数据的表,这些数据在我的应用程序中用作属性。这些数据很少变化,它们就像常数一样。在我的应用程序中,我有一些代表这些表的类枚举,这是其中之一:
public enum MyEnum {
ENUM_ONE {
public String getCode() {
return "1";
}
},
ENUM_TWO {
public String getCode() {
return "2";
}
};
private static final String tableName = "MYENUMTABLE";
public abstract String getCode();
public String getTableName() {
return tableName;
}
}
问题是,正如您在上面的代码中看到的,这是硬编码(不是吗?),所以我想知道是否可以创建一些代码来在应用程序启动时加载这些属性。
该应用程序是使用 Java、Hibernate、Spring 框架、Oracle 11.2.0.3 构建的……也许它存在于这些工具中的任何一个中。
提前致谢。
最佳答案
首先,我会按如下方式创建枚举(请参阅我的答案 here ):
public enum MyEnum {
ENUM_ONE("1"),
ENUM_TWO("2")
;
private final String code;
private MyEnum(final String code) {
this.code = code;
}
//Not nearly necessary since the toString() method returns the same value.
public String getCode() {
return code;
}
public String toString() {
return code;
}
};
然后,假设您正在使用 MySQL 数据库和 JPA,因为您的问题没有指定您正在使用的 RDBMS 和 ORM API,则 @Column
注释包含 columnDefinition
您可以在其中定义 ENUM
DDL 定义的属性,
例如,
@Column(name="CODE_ENUM", table="MYENUMTABLE", columnDefinition="ENUM(2) NOT NULL") //table is OPTIONAL
private MyEnum codeEnum;
//Generate getters and setters.
这是一个使用 JPA 的示例,因此您的 Hibernate 必须支持 JPA。
<小时/>对于 Oracle,您可以根据您的要求使用 @Enumerated(EnumType.ORDINAL)
而不是使用 columnDefinition
。
我希望这会有所帮助。
关于java - 将属性从数据库加载到枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28189681/