休眠中的枚举映射

时间:2011-06-21 02:40:11

标签: hibernate enums hibernate-mapping

  public enum Sources {


      SOURCE_MANUAL("manual"),

      SOURCE_RE_EDITING("re editing");


      private String source;

      private Sources(String source){
          this.source = source;
      }

     public String getSource() {
    return source;
     }
    }  


  Mapping in Domain object as
         @Column(name = "SOURCE")
      @Enumerated(EnumType.STRING)
       public Sources getSource() {
          return this.source;
       }

问题:数据库中的源列有值(手动,重新编辑)所以当我尝试加载对象时,我得到以下异常

   Caused by: java.lang.IllegalArgumentException: No enum const class api.domain.Sources.manual
 [java]     at java.lang.Enum.valueOf(Enum.java:214)
 [java]     at org.hibernate.type.EnumType.nullSafeGet(EnumType.java:124)
我在这里做错了吗?

2 个答案:

答案 0 :(得分:1)

枚举中的source属性与枚举映射无关。就Hibernate而言,您的数据库必须包含值SOURCE_MANUALSOURCE_RE_EDITING。由于其中一个值包含空格,因此可能无法在不迁移数据库的情况下使用常规枚举映射。可能有一些黑客,但似乎你最好只使用字符串进行此映射并手动转换为枚举。

答案 1 :(得分:0)

尝试升级到Hibernate版本3.5.6。

如果这不起作用,你也可以尝试覆盖枚举中的toString()方法并返回枚举名称,它不是很漂亮,但它应该可以让你在短期内解决问题。

public enum Sources {


  SOURCE_MANUAL("SOURCE_MANUAL", "manual"),

  SOURCE_RE_EDITING("SOURCE_RE_EDITING", "re editing");


  private String source;
  private String enumName;

  private Sources(String enumName, String source){
      this.source = source;
      this.enumName = enumName;
  }

 public String getSource() {
return source;
 }

 public String toString() {
return enumName;
 }

}