如何将 Hibernate String 列转换为 Enum?

Posted

技术标签:

【中文标题】如何将 Hibernate String 列转换为 Enum?【英文标题】:How can I convert a Hibernate String column to an Enum? 【发布时间】: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;

到我的领域?我没见过这样的。

我知道后备方法是添加一些预持久化逻辑,将数据缓慢迁移到另一列,但我想避免这种情况。

谢谢 - 这是我在 *** 上的第一个问题!

【问题讨论】:

【参考方案1】:

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

【讨论】:

我花了一点时间才知道如何使用它。实现在这里:docs.jboss.org/hibernate/stable/annotations/reference/en/… 自定义 UserType 可以应用于字段,本质上就是我正在寻找的转换器。

以上是关于如何将 Hibernate String 列转换为 Enum?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Hibernate 选择列?

在 Hibernate 中为 Informix 数据库中的列进行类型转换

在 Python 中将 Excel 列类型从 Int 转换为 String

如何最好地将 SparkSQL Dataframe Array[String] 列转换为新的 [String] 列

如何将数据框中的多个“字符串”列转换为日期时间列?

如何将 pandas 数据框列转换为本机 python 数据类型?