小编典典

Hibernate@枚举映射

hibernate

Hibernate提供的@Enumerated注释支持Enum使用ORDINAL或的两种类型的映射STRING。当我们使用映射时EnumType.STRING,它使用的“名称”
Enum而不是toString()Enum的表示形式。在数据库列仅包含一个字符的情况下,这是一个问题。例如,我有以下枚举:

public enum Status{
  OPEN{
   @Override
   public String toString(){
     return "O";}
   },

  WAITLIST{
   @Override
   public String toString(){
     return "W";}
   },

  COMPLETE{
   @Override
   public String toString(){
     return "C";}
   }

}

当我坚持枚举Status.OPEN使用@Enumerated(EnumType.STRING),即hibernate尝试在数据库中存储的值是开放的。但是,我的数据库列仅包含一个字符,因此会引发异常。

克服这个问题的一个办法是改变枚举类型持有单个字符(如STATUS.OSTATUS.W代替STATUS.OPENSTATUS.WAITLIST)。但是,这降低了可读性。有什么建议可以保留可读性以及将Enum映射到单个字符列吗?

谢谢。


阅读 279

收藏
2020-06-20

共1个答案

小编典典

检查这两篇文章-http://community.jboss.org/wiki/Java5EnumUserType和http://community.jboss.org/wiki/UserTypeforpersistingingaTypesafeEnumerationwithaVARCHAR列

他们通过自定义UserType解决了问题。

2020-06-20