Enum Mapping в спящем режиме - PullRequest
0 голосов
/ 21 июня 2011
  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 ]

1 голос
/ 21 июня 2011

Свойство source в вашем перечислении не имеет отношения к отображению перечисления. Что касается Hibernate, ваша база данных должна содержать значения SOURCE_MANUAL и SOURCE_RE_EDITING. Поскольку одно из значений содержит пространство, может быть невозможно использовать обычное отображение перечисления без переноса базы данных. Может быть и хак, но кажется, что вам лучше использовать строку для этого отображения и конвертировать в enum вручную.

0 голосов
/ 22 июня 2011

Попробуйте обновить до 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;
 }

}
...