[英]Java - Referring Enum (number value) in database using Hibernate (HBM)
我正在嘗試將具有 (1, 2, 3, 4, __ALL) 等值的巨大 Postgres 表中的文本字段轉換為枚舉。 計划是將文本字段更新為數據庫中的枚舉。
我知道我不能在 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)不匹配。
因此,我只能將值 '__ALL' 正確插入到表中。 需要建議在此處插入值 1、2、3、4。 謝謝!
注意:嘗試使用數據庫中相同的現有值('1'、'2'、'3'、'4'、'__ALL')以避免代碼更改。
在這里可以提供幫助的是將 AttributeConverter 用於枚舉。
這是來自 Thorben Janssen 的鏈接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");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.