Hallo,
ich habe mir die Hibernate-Referenz und einige Beiträge in verschiedenen Foren durchgelesen, werde aber aus diesem Thema noch nicht ganz schlau...
Beispiel:
Die zwei Klassen B und C sind von A abgeleitet. Die Strategie
table-per-subclass using a discriminator gibt das Datenmodell vor:
Code:
tbl_A tbl_B tbl_C
ID ID ID
A1 B1 C1
A2
disc
Im Feld 'disc' steht, je nach Klasse 'A', 'B' oder 'C'. Das mapping sieht dann etwa so aus:
Code:
<class name="A" table="tbl_A" discriminator-value="A">
<id name="id" column="ID" />
<discriminator column="disc" />
<property name="prop1" column="A1"/>
<property name="prop2" column="A2"/>
<subclass name="B" discriminator-value="B">
<join table="B">
<key column="ID" />
<property name="prop3" column="B1" />
</join>
</subclass>
<!-- Für C so wie bei B ... -->
</class>
Ich hoffe bis hierher ist mein Ansatz richtig, und mein Problem kommt wirklich erst jetzt:
Zwischen einer Klasse X und den Klassen A, B, C gibt es eine n:m Relation. Im Datenbankmodell würde ich deshalb eine Tabelle X_zu_A erstellen, leider brauche ich hier zusätzlich noch ein zusätzliches Feld für die Ordnung.
Mein Ansatz für das Mapping war der, dass ich eine Klasse für die Relation X_zu_A implementiere und mittels many-to-one eine Verknüpfung zur Klasse X sowie zu A (Basisklasse von B und C) herstelle.
Wie kann ich aber die weiteren Attribute von B oder C verwenden? Muss ich für jede abgeleitete Klasse wieder eine Klasse für die Relation implementieren? Mein Ziel wäre es, dass ein Objekt der Klasse X die Methoden getAs(), getBs() und getCs() zur Verfügung stellt...
Für jeden Input dankbar,
peda