Hallo zusammen,
ich verwende Hibernate 3 mit dem HibernateDaoSupport von Spring.
Ich habe eine Klassenhierarchie auf eine einzelne Tabelle gemappt, und zwar eine Superklasse "Verbrauchswert" mit zwei Subklassen "HeizungsVerbrauchswert" und "WasserVerbrauchswert" mit Diskriminatorwerten "H" und "W". Dieses Mapping funktioniert problemlos.
In einer Klasse "Gebaeude" habe ich eine List<HeizungsVerbrauchswert> heizungsVerbrauchswerte und analog eine Liste von Wasserverbrauchswerten. Diese beiden Lists habe ich wie folgt gemappt:
Code:
<list name="heizungsVerbrauchswerte" cascade="all" lazy="false">
<key column="id_gebaeude" />
<index column="idx" />
<one-to-many class="HeizungsVerbrauchswert" />
</list>
und analog für die Wasserverbrauchswerte.
Persistieren ist kein Problem, die Verbrauchswert-Listen werden genau wie gewünscht in die Datenbank geschrieben und der Listen-Index wird auch korrekt gespeichert, ebenso wie der Diskriminatorwert.
Beim Lesen aus der DB gibt es allerdings eine Exception weil beim Füllen der Liste der Heizungsverbrauchswerte ein Wasserverbrauchsobjekt dabei ist, woraufhin es zu "object was not of the specified subclass" kommt. Ich führe das momentan darauf zurück, dass beide Klassen sich den gleichen Fremdschlüssel (id_gebaeude) teilen, und dass Spring oder Hibernate dann nicht erkennen kann, welcher Typ gerade geladen wird. Ich hätte allerdings erwartet, dass hierbei der Diskriminator herangezogen wird, um eine Unterscheidung durchzuführen.
Ich habe jetzt das Problem umschifft, indem ich zwei statt einer Fremdschlüssel-Spalte angelegt habe: id_gebaeude_h für die Heizungswerte, id_gebaeude_w für die Wasserwerte. Das List-Mapping habe ich dann jeweils entsprechend angepasst. Die Exception fliegt dann nicht mehr.
Ich möchte aber eigentlich nicht mit zwei Fremdschlüsselspalten arbeiten.
Ist das Problem verständlich dargestellt? Was kann man in so einem Fall unternehmen? Funktioniert ein table-per-class-hierarchy Mapping nicht wenn man innerhalb einer Klasse zwei Listen mit jeweils einer der Subklassen halten will? Viele Fragen - hoffe auf fachkundige Antworten :-)
Einen angenehmen Abend allen Forumsmitgliedern.