Hallo zusammen,
leider ist es mir trotz des Studiums diverser Foren, Dokumentationen und Büchern bislang nicht gelungen, eine einfache Vererbung, die anscheinend korrekt gespeichert wird, wieder aus der Datenbank zu lesen.
Folgenden Klassen habe ich erstellt:
Code:
public class Material {
private Status status;
public Material() {
this.status = new Status_1();
}
}
public abstract class Status {
...
}
public class Status_1 extends Status {
...
}
public class Status_2 extends Status {
...
}
public class Status_3 extends Status {
...
}
Das Mapping für Material sieht wie folgt aus:
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="de.bestblu.opticash.middleware.bestandsverwaltung.modell">
<class name="MaterialArt" table="MATERIALART">
<id name="id" column="ID"
<generator class="native"/>
</id>
<property name="clssId" type="long" column="CLSSID"/>
<property name="name" type="string" column="NAME"/>
<many-to-one name="status"
class="Status"
cascade="all"
column="STATUS_ID"/>
</class>
</hibernate-mapping>
Das Mapping für Status hat den folgenden Aufbau:
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="de.bestblu.opticash.middleware.bestandsverwaltung.modell">
<class name="Status" table="STATUS" abstract="true">
<id name="id" column="ID">
<generator class="native"/>
</id>
<discriminator column="STATUS_TYP" type="string" length="1"/>
<property name="clssId" type="long" column="CLSSID"/>
<subclass name="StatusFreigegeben" discriminator-value="1">
</subclass>
<subclass name="StatusNichtFreigegeben" discriminator-value="2">
</subclass>
<subclass name="StatusLogischGeloescht" discriminator-value="3">
</subclass>
<subclass name="StatusPhysischGeloescht" discriminator-value="4">
</subclass>
</class>
</hibernate-mapping>
Das Speichern funktioniert, wie in den Dokumentationen beschreiben.
Beim Lesen erhalte ich jedoch immer nur ein Objekt der übergeordneten Klasse Status zurück. Wie kann ich den Diskriminator dazuzbringen, mir das ursprünglich gespeicherte Objekt wieder zu instanziiern, oder geht das in Hibernate garnicht ???
Bin für jede Hilfe sehr dankbar.