【问题标题】:Load properties from Database to Enums将属性从数据库加载到枚举
【发布时间】:2015-03-27 04:49:41
【问题描述】:

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

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 构建的......也许它存在与这些工具中的任何一个有关的东西。

提前致谢。

【问题讨论】:

  • 可能duplicate?
  • @BuhakeSindi 抱歉,我没有看到可能的重复项,在那篇文章中,枚举也是硬编码的,不是吗?我希望它从数据库中加载,这些枚举可能有很多条目,并且可以在许多不同的类中使用。有可能吗?
  • 枚举是常量,因此应该被视为常量。如果您希望将这些条目加载到内存中并被各种类重用,您可以将它们缓存在缓存中并从缓存中调用值。

标签: java spring hibernate properties enums


【解决方案1】:

首先,我会按如下方式创建枚举(请参阅我的回答 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 属性,您可以在其中定义您的 @ 987654327@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 来满足您的要求。

我希望这会有所帮助。

【讨论】:

  • 仍然,哪个 Oracle 版本?你必须非常具体
  • 我刚刚用Oracle的版本更新了帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-16
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
  • 2020-05-11
  • 2014-08-07
  • 2023-03-25
相关资源
最近更新 更多