Hibernate Update eines Objektes mit enthaltenen Sets

OWiesbrock

Grünschnabel
Tach,
für Leute die sich schon ein wenig mit dem Hibernate-Framework auseinandergesetzt haben habe ich eine schöne kleine Anfrage:
Ich habe mir durch Hibernate mit Daten aus einer MySQL-DB ein entsprechendes Objekt erschaffen. Dieses Objekt enthält wiederum Sets mit weiteren Objekten, die DB-Tabellen entsprechen. Ich habe nun Daten des ersten Objekts geändert und möchte diese nun in der DB aktualisieren. Dazu rufe ich saveOrUpdate(Object o) aus dem Framework auf (Session und Transaction sind natürlich geöffnet).
Alle Daten des ersten Objekts, die nicht in den Sets enthalten sind, werden durch ein erstes Update problemlos aktualisiert, wenn Hibernate nun jedoch beginnt die Sets auszulesen und SQL-Strings zu erstellen sieht der Output etwa so aus:
update projekt_ma set ma_id=null where ma_id=?
Die ma_id ist die MitarbeiterID und ist Teilschlüssel der Tabelle projekt_ma. Kann mir einer vielleicht erklären warum Hibernate versucht diese ID auf null zu setzten? Noch besser wäre es wenn mir einer einen Lösungsvorschlag anbieten könnte.

Danke
OWiesbrock
 
Hi,

also mit so relativ wenig Informationen kann man schlecht den Fehler herausfinden. Gib mal ein wenig entsprechenden Code von den Mappings und deiner JAVA-Objekte an (arbeitest du mit xDoclet?)

Aus dem blossen SQL-Statement läßt sich nicht ableiten, was Hibernate mit deinen Objekten wirklich macht...

Gruß, CHaoZ
 
Das Mapping-File sieht an entsprechender Stelle so aus:
Code:
  <set name="projekte" table="projekt_ma" lazy="true" inverse="false"> 
  	<key column="ma_id" /> 
  	<one-to-many class="de.fourthproject.controlling.hibernate.ProjektMa" /> 
  </set>

und bei ProjektMA sieht es so aus:
Code:
      <class name="ProjektMa" table="projekt_ma"> 
          <composite-id name="id" class="ProjektMaKey"> 
              <key-many-to-one name="mitarbeiter" column="ma_id" class="Mitarbeiter"/> 
              <key-many-to-one name="projekt" column="proj_id" class="Projekt"/> 
          </composite-id> 
    
          <property name="status" column="status" type="java.lang.String" /> 
      </class>

Wie müsste ich dass denn jetzt verändern, damit HIbernate nicht versucht den Teilschlüssel auf null zu setzen?
 
Ich hatte das auch schon. du musst in dem Projekt nochmal explizit den Mitarbeiter setzen oder ihn gleich im Konstruktor verlangen. Mit hbm2java werden die Mappingklassen korrekt generiert. Das kann ich empfehlen.
 
Zurück