# Hibernate update



## webmagier (21. Dezember 2004)

Momentan update ich ein Kundenobjekt, indem ich einen neuen Kunden als Objekt erzeuge, ihm die id gebe, die er auch in der DB hat und die anderen veränderten Felder neu setze. Die anderen Felder die sich nicht ändern wie z.B. username, passwort, das Datum seit dem er angemeldet ist lasse ich unberührt. Hibernate updated auch brav mit der Methode update(), allerdings überschreibt er die Felder die ich nicht neu gesetzt habe in der DB mit null :-(

Wie kann ich das Hibernate abgewöhnen, dass er nicht veränderte Felder nicht mit null setzt?

Mfg Daniel Richter


----------



## cham (21. Dezember 2004)

hast du das objekt vorher aus der DB geholt und dann die felder gesetzt oder hast du ein new gemacht?


----------



## webmagier (21. Dezember 2004)

Ok, also ich habe eine Liste mit Customern, die ich aus der DB hole. Diese werden mir auf der Webseite tabellarisch angezeigt. Neben jedem Eintrag ist ein Link zum editieren, der als Parameter die id des Kunden hat. Wenn ich da drauf klicke geht es weiter zu einer Action, die meine CustomerForm befüllt und zur Ansicht an eine Detailseite mit einem Formular sendet. In dem Formular sollen aber nicht alle Sachen bearbeitbar sein...z.B. das Passwort, oder das Datum, an dem sich der Benutzer registriert hat.
Die Form wird dann an meine EditAction gesendet, welche die Werte, inclusive der id des Kunden ausliest....da sind aber wie gesagt nicht alle Werte drin. Daraus erzeuge ich mir ein neues KundenObjekt mit der id und den geänderten Werten. Die übrigen nicht angezeigten Werte sind in diesem Objekt null. Jetzt persistiere ich das Objekt mit update().
Die neuen Werte werden alle korrekt gesetzt, aber dummerweise werden die übrigen Felder null gesetzt, weil diese in dem Objekt null sind. Einzige Lösung die ich sehe ist die, dass ich mir erst den Kunden mit der id aus der DB hole und mit den neuen Werten überschreibe...finde ich aber ist ein ziemlicher Overhead, wenn ich erst ein select machen muss um dann zu updaten. Kann ich Hibernate nicht irgendwie mitteilen, dass es Felder in der DB mit entsprechenden Attributen im Objekt nicht überschreibt, wenn die Attribute im Objekt null sind?


----------



## cham (21. Dezember 2004)

ja ist overhead, aber so muss es sein, da null ja bedeutet, dass das attribut null sein soll. also per select holen (evtl. komplett als iterator) und die neuen werte darin setzen. dann kannst du ein update machen und es rockt.


----------



## webmagier (22. Dezember 2004)

Sieht so aus, hab es jetzt auch schon so gemacht. Wäre aber trotzdem nett, wenn Hibernate in Naher Zukunft soetwas wie updateOnlyNotNullValues() anbieten würde ;-)


Mfg Daniel Richter


----------



## cham (22. Dezember 2004)

Dann implementiere das doch, wenn Du es brauchst. Open Source lebt vom mitmachen. Aber IMHO ist so etwas nicht nötig. Bei einem Objektrelationalen Mapping kann man immer nur das komplette Objekt ändern, denn einige Attribute dürfen meistens null sein. Wer soll das dann entscheiden.


----------

