java - 将属性从数据库加载到枚举

标签 java spring hibernate properties enums

我有许多包含数据的表,这些数据在我的应用程序中用作属性。这些数据很少变化,它们就像常数一样。在我的应用程序中,我有一些代表这些表的类枚举,这是其中之一:

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/

相关文章:

java - Jhipster - 配置多个数据源

java - 方法级的 EJB 事务属性覆盖

java - GWT + Hibernate 多对一 xml O/R 映射 : SerializationException

java - 当我从具有其他外键的表中删除条目时,相应的记录也不会被删除

java - 无法获取连接惰性初始化集合

java - 在 java 中使用正则表达式修改 xml

java - 如何创建密码字段或隐藏 TableView 中的密码

spring - 如何从 Spring 授权服务器示例中获取刷新 token

java - SPRING:请求的bean当前正在创建:是否存在无法解析的循环引用

java - 使用 Spring 计划注释和更新 View