Hallo,
ich hab folgendes Problem bei dem ich seit längerem nicht weiter komme:
Ich hab 3 Klassen: Statistic, StandardStatistic und StandardStatisticEntry.
StandardStatistic ist von Statistic abgeleitet und besitzt ein Map mit Einträgen vom Typ StandardStatisticEntry.
Im XML-Mapping-File hab ichs so abgebildet:
<hibernate-mapping package="cwm.bean.statistic">
<class name="Statistic" table="statistic">
<id name="id" column="statistic_id">
<generator class="native"/>
</id>
<property name="createDate" column="date_create" type="date"/>
...
<joined-subclass name="StandardStatistic" table="statistic_output">
<key column="statistic_id"/>
<map name="entries" table="statistic_output" cascade="save-update,delete">
<key column="statistic_id"/>
<map-key type="string" column="property"/>
<one-to-many class="StandardStatisticEntry"/>
</map>
</joined-subclass>
</class>
<class name="StandardStatisticEntry" table="statistic_output">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="property" column="property" type="string" length="32"/>
<property name="value" column="value" type="string" length="32"/>
<property name="input" column="input" type="string" length="32"/>
</class>
</hibernate-mapping>
In der DB schauts so aus:
Tabelle statistic:
statistic_id, felder...
Tabelle statistic_output:
id (Primärschlüssel), statistic_id (Fremdschlüssel), property, value, input
d.h. in der Tabelle statistic_output gibt es mehrere Datensätze die den selben Fremdschlüssel haben also einem Statistic-Eintrag gehören.
Mein Problem ist nun, dass wenn ich ein Objekt vom Typ StandardStatistic erzeuge und abspeichere Hibernate als erstes 1 Insert auf die Tabelle statistic absetzt und gleich dannach 1 Insert auf die Tabelle statistic_output, dabei wird aber nur der Fremdschlüsselgefüllt und die restlichen Felder sind null. Erst dannach werden so viele Inserts abgesetzt, wie viele Elemente in dem StandardStatistic.map vorhanden sind.
Bsp:
StandardStatistic Objekt wo das Map-Element 2 Einträge vom Typ StandardStatisticEntry hat führt zu folgenden SQL-Statements:
1. Hibernate: insert into statistic (date_create, statistic_class, hash_code, hash_validity, field_info, field_text, flag, hash_version, order_id, input_id, charge_id, fk_machine_id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
2. Hibernate: insert into statistic_output (statistic_id) values (?)
3. Hibernate: insert into statistic_output (value, input, statistic_id, property) values (?, ?, ?, ?)
4. Hibernate: insert into statistic_output (value, input, statistic_id, property) values (?, ?, ?, ?)
5. Hibernate: update statistic_output set statistic_id=?, property=? where id=?
6. Hibernate: update statistic_output set statistic_id=?, property=? where id=?
Das 2. Statement führt eben zu dieser Null-Zeile in der DB und verursacht natürlich Fehler sobald ich die Spallte "property" auf not-null=true setz.
Weiß jemand was an meinem XML-Mapping falsch ist?
Ich vermute es liegt an der polymorphen 1-n Beziehung zwischen Tabellen statistic und statistic_output. Als Beispiele hab ich bis jetzt nur immer 1-1 Beziehungen zwischen der abgeleiteten Tabelle und der Ursprungtabelle.
Außerdem führt meine XML-Konstelation im joined-subclass immer dazu, dass ein foreign-key von statistic_output.statistic_id auf statistic_output.id erzeugt wird. Das führt dazu dass kein Datensatz eingefügt werden kann außer ich lösch den Fremdschlüssel immer per Hand.
Wenn ich die Daten per Hand in die DB eintrage funktioniert das Selektieren und Ändern der Daten einwandfrei.
Bin für jede Hilfe dankbar!!
Viele Grüße
jack-flash
|