hibernate中的枚举映射

hibernate中的枚举映射,hibernate,enums,hibernate-mapping,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 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;
       }

我在这里做错了什么吗?

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

尝试升级到Hibernate 3.5.6版

如果这不起作用,您还可以尝试重写枚举中的toString()方法并返回枚举名称,这并不漂亮,但从短期来看,它应该可以帮助您解决问题

   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)

您使用的是什么版本的hibernate?我使用的是3.5.6-Final版本,我无法复制您的问题。我使用的是3.5.3版本。这不起作用,我想不会,因为在hibernate内部hibernate正在执行Enum.valueOf(EnumType.class,“value”),它将失败,因为此“手动”字符串值不存在枚举。正确,但没有帮助。如果Dhirendra想要将一些任意字符串映射到枚举,最好为此创建一个专门的用户类型。
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;
 }

}