java - 如何将 Hibernate String 列转换为 Enum?

标签 java hibernate enums types

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

最佳答案

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

关于java - 如何将 Hibernate String 列转换为 Enum?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5362511/

相关文章:

java - 根据运行时加载的 xml 模式序列化 java 对象

java - 403 禁止将 wss4jOutInterceptor 与 Camel 和 cxf 一起使用

java - Spring Boot findByIdIn 内部列表

java - JPA @OrderBy 与 Hibernate

java - 消息包中的枚举标签

string - 我可以在 Rust 中将字符串转换为没有宏的枚举吗?

java - 在数组 Class[] 的声明中找不到符号

java.lang.NoSuchMethodException : Unknown property 'language' on class 'class java.lang.Class'

java - 在 Hibernate 中快速插入许多实体

c# - ISO3166 国家/地区的枚举 - 可接受的做法?