2009-04-30 13 views
1

Ich muss ein Objekt beibehalten, dessen eine der Eigenschaften eine Enumeration ist. Diese gesamte Struktur muss in einer einzigen Tabelle gespeichert werden. Die Enum definiert die möglichen GeschlechterHibernate Complex Typ speichern

public enum Gender { MALE,FEMALE }

Die Hauptklasse

public Person { String name; Gender gender; }

ist Wenn diese Person-Klasse in einer einzigen Tabelle zu beibehalten werden muss, wie soll das hbm Mapping sein?

Antwort

2

Sie haben nicht erwähnt, wenn Sie Java oder .Net verwenden, aber ich gebe Ihnen die Lösung, die ich für .NET gefunden habe, und so können Sie es gegebenenfalls in Java übersetzen. Ich habe einen Beitrag gefunden, der die Verwendung eines generischen Typs vorschlägt, mit dem Sie die Enumeration als ein Feld in der Tabelle als Text deklarieren können, so dass Sie den Namen des Wertes in der Tabelle sehen können.

Click Me!

änderte ich meine leicht die Länge der Säule zu beschränken.

/// <summary> 
/// This class allows enums to be stored as a string in the database 
/// </summary> 
/// <typeparam name="T">The Enum Type</typeparam> 
public class EnumMapper<T> : EnumStringType 
{ 
    /// <summary> 
    /// The default constructor which defines that the maximum length of 
    /// an enum string column in the datbase is 30 characters. 
    /// </summary> 
    public EnumMapper() : base(typeof(T), 30) 
    { 
    } 
} 

Das hat für mich in vielerlei Hinsicht gut funktioniert. Wenn Sie die Reihenfolge der Elemente in der Enumeration ändern, funktioniert es immer noch und Sie können auch sehen, was der Wert in der db bedeutet, um das Schreiben von Ad-hoc-Abfragen zu vereinfachen! :)