Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将属性从数据库加载到枚举_Java_Spring_Hibernate_Properties_Enums - Fatal编程技术网

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

Java 将属性从数据库加载到枚举,java,spring,hibernate,properties,enums,Java,Spring,Hibernate,Properties,Enums,我有许多表,其中的数据在我的应用程序中用作属性。这些数据很少变化,它们就像常数。在我的应用程序中,我有一些代表这些表的类enum,这是其中之一: public enum MyEnum { ENUM_ONE { public String getCode() { return "1"; } }, ENUM_TWO { public String getCode() { return "2"; } }; private s

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

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框架、Oracle11.2.0.3。。。也许它存在于这些工具中


提前感谢。

首先,我会创建如下枚举(请参见我的答案):

然后,假设您使用的是MySQL数据库&JPA,因为您的问题没有指定您正在使用的RDBMS和ORMAPI,那么注释中包含的属性可以定义
ENUM
DDL定义

例如:

这是一个使用JPA的示例,因此您的Hibernate必须支持JPA


对于Oracle,您可以使用
@Enumerated(EnumType.ORDINAL)
而不是使用
columnDefinition
来满足您的需求


我希望这会有所帮助。

首先,我会创建如下枚举(请参见我的答案):

然后,假设您使用的是MySQL数据库&JPA,因为您的问题没有指定您正在使用的RDBMS和ORMAPI,那么注释中包含的属性可以定义
ENUM
DDL定义

例如:

这是一个使用JPA的示例,因此您的Hibernate必须支持JPA


对于Oracle,您可以使用
@Enumerated(EnumType.ORDINAL)
而不是使用
columnDefinition
来满足您的需求


我希望这会有所帮助。

不过,哪种Oracle版本?你必须非常具体。我刚刚用Oracle版本更新了这篇文章。不过,哪个Oracle版本?你必须非常具体。我刚刚用Oracle版本更新了帖子。可能吗?@BuhakeSindi抱歉,我没有看到可能的副本,在那篇帖子中枚举也是硬编码的,不是吗?我希望它是从数据库加载,这些枚举可以有很多条目,可以在许多不同的类中使用。有可能吗?枚举是常量,因此应视为常量。如果您希望这些条目加载到内存中并被各种类重用,您可以将它们缓存在缓存中并从缓存中调用值。可能吗?@BuhakeSindi抱歉,我没有看到可能的重复项,在那篇文章中,枚举也是硬编码的,不是吗?我希望它是从数据库加载,这些枚举可以有很多条目,可以在许多不同的类中使用。有可能吗?枚举是常量,因此应视为常量。如果希望将这些条目加载到内存中并被各种类重用,可以将它们缓存在缓存中并从缓存中调用值。
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;
    }
 };
@Column(name="CODE_ENUM", table="MYENUMTABLE", columnDefinition="ENUM(2) NOT NULL") //table is OPTIONAL
private MyEnum codeEnum;

//Generate getters and setters.