2009-05-26 6 views
4

Mit einem Hibernate-Mapping einer Legacy-Datenbank möchte ich EnumTypes verwenden, um bestimmte Spalten, die String-Konstanten mit Leerzeichen enthalten, einer Enum-Klasse zuzuordnen.Kann Karte EnumTypes mit Leerzeichen im Winterschlaf halten?

Die Abbildung:

@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; 
    } 
} 

Wie Sie sehen kann uns nicht wir die Datenbankwerte gerade wie der Enum-Name, da gibt es weißen Räume in ihnen.

Ich frage mich, ob es möglich ist, enums dafür zu verwenden?

Antwort

4

Blick auf GenericEnumUserType bei hibernate.org beschrieben (unter "Flexible Lösung")

Ändern Status wie folgt:

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 
    } 
} 

nun die @Type Anmerkung auf Ihrem Unternehmen verwendet.

@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

Sie können auch eine ReversibleEnum (http://www.khanspot.com/2006/12/04/java-wish-a-reversible-enum/) buchen, mit dem vonString() -Methode elegant zu implementieren auf Status. – mtpettyp