2009-05-09 10 views
0

Okay, also habe ich das, was ich hatte, zerrissen und baue es um, hier ist was ich tun muss.Hilfe bei Hibernate Mapping Problem ... führt bitte! :)

Ich habe eine Entität namens Eigenschaft mit:

String name;

@ManyToOne EntityType-Typ;

??????? Wert

Ich muss auch einen Wert speichern, aber abhängig vom Typ kann der Wert entweder ein String, ein Double oder eine Verknüpfung zu einem anderen Objekt (der Klasse type.getJavaClass()) sein.

Ich habe versucht, dies mit Vererbung alle Arten von Möglichkeiten, aber immer noch in der Lage, neue Property() zu tun und setzen Sie den Wert auf Null, bis ein Typ ausgewählt wird, wenn die entsprechende Art von Typ ausgewählt wird.

Was wäre das Schönste würde sein, den Value Typ Objekt zu haben (auf diese Weise könnte ich entweder einen String, Double oder type.getJavaClass() dort setzen, aber Hibernate lässt mich das nicht tun. :(

Irgendwelche Ideen oder Empfehlungen auf einem guten Weg, dies würde geschätzt zu erreichen! Danke, Joshua

Antwort

0

Das Problem ist, Hibernate es in die Datenbank muss in der Lage zu kartieren so eine Art von Objekt nicht wirklich Arbeit

Ich würde empfehlen, dass Sie Wert vom Typ String machen rappen Sie die "get" - und "set" -Rufe, damit der Endanrufer nichts davon merkt. Zum Beispiel:

public class Property 
{ 

String name; 

Enum Type; 
String valueString; 




public object getValue() 
{ 
    if(getType() == Long) 
    { 

    return Long.valueOf(getStringValue()); 
    } 

    if(getType() == String) 
    { 
     return valueString; 
    } 

    ..... 

} 

public void setValue(obj) 
{ 
    if(obj instanceof Long) 
    { 
    setStringValue(obj.toString()) 
     setType(Long) 
    } 
    .... 

} 

} 

Wie für einen Link zu einem anderen Objekt, bedeuten aufgrund Sie einen Link zu einer anderen Tabelle? In diesem Fall würde ich wahrscheinlich eine separate Spalte für jede Tabelle erstellen, damit Sie die referenzielle Integrität der Datenbank beibehalten können. Dann können Sie einfach die getValue(), setValue() erweitern, um die entsprechende Entität zu erhalten.

+0

Ja sehr gut, das ist im Grunde, was ich an Ort und Stelle, GetTextValue() und GetNumericalValue() und GetEntityValue() alles von ValueType geerbt haben. Ich hoffe, dass ich keine Performance-Probleme mit dem einen riesigen Tisch, dass alle diese Erbschaft hat Dinge in, aber es ist sicher, schöne OO sehen. Danke! Joshua –