Hallo,
ich habe eine Klassenstruktur (siehe Bild) in der die KanalAufträge sowohl von Aufträgen erben, als auch ein spezielles interface (IKanalAuftrag) implementieren.
Definiere ich die KanalAufträge als Subklassen der Aufträge, so wird die Beziehung zum Interface unterschlagen,
wodurch ich deren Attribute nun in jeder SubClass angeben muss.
Hat jemand eine Idee wie die abgebildete Struktur in ..*.hbm.xml-Datei(en) aussehen muss, damit ich die im Interface definierten Attribute nicht zusätzlich in den Klassen angeben muss?
Derzeitig sieht das Mapping wie folgt aus:
Hier das Mapping für das Interface IKanalAuftrag (Beacht die Attribute 'cluster' und 'gisObjects', die auch im KanalAuftrag definiert sind):
Code:
<hibernate-mapping>
<class name="de.b.ass.domain.kanal.IKanalAuftrag" abstract="true" table="T_AUFTRAG"
discriminator-value="I" lazy="true" optimistic-lock="none">
<cache usage="read-write" />
<id name="id" type="long">
<column name="ID" />
<generator class="sequence">
<param name="sequence">AUFTRAG_SEQ</param>
</generator>
</id>
<many-to-one name="cluster" class="de.b.ass.domain.kanal.model.Cluster" fetch="select">
<column name="FK_CLUSTER_ID" />
</many-to-one>
<set name="gisObjects" lazy="true">
<key column="FK_AUFTRAG_ID"/>
<one-to-many class="de.b.ass.domain.kanal.model.GisObject"/>
</set>
</class>
</hibernate-mapping>
Und hier ein Ausschnitt aus dem Auftragsmapping (Beschränkt auf Einzelauftrag / KanalEinzelauftrag):
Code:
<hibernate-mapping>
<class name="de.b.ass.domain.Auftrag" abstract="true" table="T_AUFTRAG"
discriminator-value="A" lazy="true" optimistic-lock="none">
<id name="id" type="long">
<column name="ID" />
<generator class="sequence">
<param name="sequence">AUFTRAG_SEQ</param>
</generator>
</id>
<discriminator column="TYP" type="string" length="5" />
<property name="bezeichnung" type="string">
<column name="BESCHR" length="250" />
</property>
...
<subclass name="de.b.ass.domain.Einzelauftrag" discriminator-value="E">
<property name="nummer" type="string">
<column name="NUMMER" length="10" />
</property>
...
<subclass name="de.b.ass.domain.kanal.model.KanalEinzelAuftrag" discriminator-value="KSS_E">
<many-to-one name="cluster" class="de.b.ass.domain.kanal.model.Cluster" fetch="select">
<column name="FK_CLUSTER_ID" />
</many-to-one>
<set name="gisObjects" lazy="true">
<key column="FK_AUFTRAG_ID"/>
<one-to-many class="de.b.ass.domain.kanal.model.GisObject"/>
</set>
</subclass>
</subclass>
</class>
</hibernate-mapping>
Vielen Dank für die Hilfe.
Liebe Grüße
Andreas