【发布时间】:2011-07-18 18:20:14
【问题描述】:
我目前在 Hibernate 持久化类中有一个简单的字符串字段:
private String font = "Times New Roman";
“Times New Roman”是默认值,因此许多存储对象都有该数据。出于多种原因,我想将其转换为枚举:
@Enumerated(EnumType.String)
private FontEnum font = FontEnum.TIMES;
Hibernate 使用 Enum.valueOf(clazz, string) 转换列数据,由于空格,在“Times New Roman”上会失败。
谷歌搜索建议覆盖 Enum.valueOf() 是不可能的;其他人知道不同吗?我可以欺骗 Enum.valueOf() 将“Times New Roman”转换为 FontEnum.TIMES 吗?
或者,我可以创建一个自定义的 Hibernate 转换器,例如:
public FontEnum legacyConverter(String old);
并添加
@Enumerated(EnumType.String)
@Converter(Converters.legacyConverter()) // Does this exist?
private FontEnum font = FontEnum.TIMES;
到我的领域?我没见过这样的。
我知道后备方法是添加一些预持久化逻辑,将数据缓慢迁移到另一列,但我想避免这种情况。
谢谢 - 这是我在 StackOverflow 上的第一个问题!
【问题讨论】:
标签: java hibernate enums types