Java-使用Hibernate(HBM)引用数据库中的Enum(数字值)

时间:2019-07-19 23:52:10

标签: java hibernate enums hbm

我正在尝试将巨型Postgres表中的文本字段转换为枚举,该表的值类似于(1、2、3、4,__ ALL)。计划是将文本字段更新为数据库中的枚举。

我知道我无法在Java中执行以下Enum;

public enum MyEnum {
 1,2,3,4; 
}

我可以这样做;

public enum MyEnum {
  _1,_2,_3,_4;
}

或者:

public enum QuartileNumber {
   ONE("1"), TWO("2"), THREE("3"), FOUR("4"), __ALL("__ALL");
}

我的休眠映射如下:

<property name="quartileNumber" column="quartile_number">
      <type name="com.altosresearch.model.PostgreSQLEnumType">
        <param name="enumClass">com.altosresearch.model.QuartileNumber</param>
        <param name="type">12</param>
      </type>
</property> 

使用此映射和我的Java枚举(QuartileNumber);

QuartileNumbers.valueOf(“ __ ALL”)-返回'_ALL'(com.altosresearch.model.QuartileNumber的预期enumClass)

QuartileNumbers.valueOf(“ ONE”)-返回'ONE'(由于与数据库枚举值之一(1、2、3、4,__ ALL)不匹配,因此显然会在数据库中被拒绝。 / p>

因此,我只能在表中正确插入值“ __ALL”。还需要在此处插入值1、2、3、4的建议。谢谢!

注意:尝试使用数据库中相同的现有值(“ 1”,“ 2”,“ 3”,“ 4”,“ __ ALL”)以避免代码更改。

1 个答案:

答案 0 :(得分:0)

在这里可以帮忙的是为枚举使用AttributeConverter。

这里是Thorben Janssen的链接 https://thoughts-on-java.org/jpa-21-type-converter-better-way-to/

如何在Enum定义中保存1,2,3,4,__ ALL数据库值:

public enum QuartileNumber {
   ONE("1"), TWO("2"), THREE("3"), FOUR("4"), __ALL("__ALL");
}