2009-05-26 91 views
4

Hibernate映射遺留數據庫我想使用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

GenericEnumUserTypehibernate.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 2009-05-26 14:42:20