【发布时间】:2011-07-23 23:33:28
【问题描述】:
Hibernate 提供了@Enumerated 注解,它支持使用ORDINAL 或STRING 两种类型的Enum 映射。当我们使用EnumType.STRING 进行映射时,它采用Enum 的“名称”而不是枚举的toString() 表示。在数据库列仅包含一个字符的情况下,这是一个问题。例如,我有以下枚举:
public enum Status{
OPEN{
@Override
public String toString(){
return "O";}
},
WAITLIST{
@Override
public String toString(){
return "W";}
},
COMPLETE{
@Override
public String toString(){
return "C";}
}
}
当我使用 @Enumerated(EnumType.STRING) 持久化枚举 Status.OPEN 时,Hibernate 尝试存储在数据库中的值是 OPEN。但是,我的数据库列仅包含一个字符,因此会引发异常。
解决此问题的一种方法是更改 Enum 类型以保存单个字符(例如 STATUS.O、STATUS.W 而不是 STATUS.OPEN、STATUS.WAITLIST)。但是,这会降低可读性。有什么建议可以保持可读性以及将 Enum 映射到单个字符列?
谢谢。
【问题讨论】: