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

时间:2015-01-28 10:19:52

标签: 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;
  }
}

正如您在上面的代码中看到的那样,这是硬编码(不是吗?),所以我想知道是否有可能在应用程序启动时创建一些代码来加载这些属性。 / p>

该应用程序是使用Java,Hibernate,Spring框架,Oracle 11.2.0.3构建的......也许它存在于任何这些工具中。

提前致谢。

1 个答案:

答案 0 :(得分:0)

首先,我会按如下方式创建枚举(请参阅我的回答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来满足您的要求。

我希望这会有所帮助。