2009-05-26 2 views
4

Наличие спящего режима для сопоставления устаревшей базы данных Я хочу использовать EnumTypes для сопоставления определенных столбцов, содержащих строковые константы с пробелом, для некоторого класса Enum.Может спящий режим карты EnumTypes с пробелами?

Отображение:

@Entity 
@Table(name = "OPERATOR") 
public class Operator { 
    @Id 
    @Column(name = "ID") 
    private Long id; 
    ... 

    @Enumerated(EnumType.STRING) 
    @Column(name = "STATUS") 
    private Status status; 
    ... 
} 

public enum Status { 
    OPERATOR_CREATED("Operator created"), 
    ACTIVE("Active"), 
    END_DATED("End dated"); 

    private String name; 

    Status(String status) { 
     name = status; 
    } 
} 

Как вы можете видеть, что мы не можем нас значения базы данных прямо как имена перечислений, так как есть белые места в них.

Мне было интересно, можно ли использовать перечисления для этого?

ответ

4

Посмотрите на GenericEnumUserType описано в hibernate.org (Под "Гибкое решение")

Изменить Status следующим образом:

public enum Status 
{ 
    OPERATOR_CREATED("Operator created"), 
    ACTIVE("Active"), 
    END_DATED("End dated"); 

    private String name; 

    Status(String status) 
    { 
     name = status; 
    } 

    public String toString() 
    { 
     return name; 
    } 

    public Status fromString(String value) 
    { 
     if ("Operator created".equals(value) 
     { 
      return OPERATOR_CREATED; 
     } 
     //etc 
    } 
} 

Теперь используйте @Type аннотацию Вашей организации.

@Entity 
@Table(name = "OPERATOR") 
public class Operator { 
    @Id 
    @Column(name = "ID") 
    private Long id; 
    ... 

    @Column(name = "STATUS", columnDefinition = "VARCHAR(31)", nullable = false) 
    @Type(type = "my.package.GenericEnumUserType", 
      parameters = { 
     @Parameter(name = "enumClass", value = "my.package.Status"), 
     @Parameter(name = "identifierMethod", value = "toString"), 
     @Parameter(name = "valueOfMethod", value = "fromString") }) 
    private Status status; 
    ... 
} 
+0

Вы также можете посмотреть на использовании ReversibleEnum (http://www.khanspot.com/2006/12/04/java-wish-a-reversible-enum/) элегантно реализовать fromString метод() по статусу. – mtpettyp

Смежные вопросы