如何将Hibernate String列转换为Enum?

时间:2011-03-19 13:54:35

标签: java hibernate enums types

我目前在Hibernate持久化类中有一个简单的String字段:

 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上的第一个问题!

1 个答案:

答案 0 :(得分:2)

您可以使用EnumUserType,请参阅this Question