Java - 使用 Hibernate (HBM) 在数据库中引用枚举(数字值)
Java - Referring Enum (number value) in database using Hibernate (HBM)
我正在尝试将具有类似 (1, 2, 3, 4, __ALL) 值的巨型 Postgres table 中的文本字段转换为枚举。计划是将文本字段更新为数据库中的枚举。
我明白我不能在 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") - returns '_ALL'(com.altosresearch.model.QuartileNumber 的预期 enumClass)
QuartileNumbers.valueOf("ONE") - returns 'ONE'(这显然会在数据库中被拒绝,因为它与数据库枚举值之一不匹配( 1、2、3、4,__ALL)。
因此,我只能将值“__ALL”正确插入到 table 中。需要在此处插入值 1、2、3、4 的建议。谢谢!
注意:尝试使用数据库中相同的现有值('1'、'2'、'3'、'4'、'__ALL')以避免代码更改。
这里有用的是对枚举使用 AttributeConverter。
这是来自 Thorben Janssen 的 link
https://thoughts-on-java.org/jpa-21-type-converter-better-way-to/
如何在数据库中保存值:1、2、3、4,__ALL 来自枚举定义:
public enum QuartileNumber {
ONE("1"), TWO("2"), THREE("3"), FOUR("4"), __ALL("__ALL");
}
我正在尝试将具有类似 (1, 2, 3, 4, __ALL) 值的巨型 Postgres table 中的文本字段转换为枚举。计划是将文本字段更新为数据库中的枚举。
我明白我不能在 Java;
中做如下 Enumpublic 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") - returns '_ALL'(com.altosresearch.model.QuartileNumber 的预期 enumClass)
QuartileNumbers.valueOf("ONE") - returns 'ONE'(这显然会在数据库中被拒绝,因为它与数据库枚举值之一不匹配( 1、2、3、4,__ALL)。
因此,我只能将值“__ALL”正确插入到 table 中。需要在此处插入值 1、2、3、4 的建议。谢谢!
注意:尝试使用数据库中相同的现有值('1'、'2'、'3'、'4'、'__ALL')以避免代码更改。
这里有用的是对枚举使用 AttributeConverter。
这是来自 Thorben Janssen 的 link https://thoughts-on-java.org/jpa-21-type-converter-better-way-to/
如何在数据库中保存值:1、2、3、4,__ALL 来自枚举定义:
public enum QuartileNumber {
ONE("1"), TWO("2"), THREE("3"), FOUR("4"), __ALL("__ALL");
}