如何将Hibernate的字符串列转换为枚举?

3

我目前在一个被持久化的 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上的第一个问题!

1个回答

2

1
我花了一点时间才看出这个会怎样使用。实现在这里:http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-hibspec-property 自定义UserType可以应用于字段,本质上就是我正在寻找的转换器。 - jbrookover

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接