Ich fragte mich, was ist der beste Weg, um einige Felder eines Dettached-Objekts mit HB auf Java zu aktualisieren. Vor allem, wenn das Objekt Kind Objekte Attribute hat. Zum Beispiel (Anmerkungen entfernt und Felder Anzahl reduziert, um Lärm zu reduzieren):
public class Parent {
int id;
String field2;
...
Child child;
}
public class Child {
int id;
String field3;
}
Wenn ich einen Parent in einer MVC-Webapp aktualisiere, könnte ich eine Parent-Instanz aufrufen, indem ich Session.get(Parent.class,123) verwenden Sie es, um ein Formular auszufüllen und anzuzeigen. Keine DTOs, nur die abgetrennte übergeordnete wird an die Ansicht übergeben und an ein Formular gebunden. Jetzt möchte ich nur dem Benutzer erlauben, die Feld2 Attribut des Elternteils. Also, wenn der Benutzer Beiträge das Formular erhalte ich eine Parent-Instanz mit der id und field2 gefüllt (ich denke, die mvc-Framework nicht egal hier, alle verhält sich meist das gleiche, wenn Bindung).
Welche Strategie ist nun die beste, um die Aktualisierung der Entität durchzuführen? Ich kann in einigen Alternativen denken, aber ich möchte die Experten zu hören :) (Denken Sie daran, dass ich die Beziehung zwischen der übergeordneten und der untergeordneten Instanz nicht verlieren möchte)
A) Rufen Sie die Parent-Instanz aus der Session wieder auf und ersetzen Sie die aktualisierten Felder von Hand
Parent pojoParent; //binded with the data of the Form.
Parent entity = Session.get(Parent.class,pojoParent.getId());
entity.setField2(pojoParent.getField2()).
Ich benutze das sehr oft. Aber die pojoParent scheint als eine verdeckte DTO verwendet werden. Auch wird es schrecklich, wenn die Anzahl der Felder zu aktualisieren wird größer.
B) Speichern Sie das Child irgendwo (httpSession?) und verknüpfen Sie es später.
Parent parent = Session.get(Parent.class,123);
//bind the retrieved parent to the form
// store the Child from parent.getChild() on the httpSession
...
//when the users submits the form...
pojoParent.setChild(someHttpSessionContext.getAttribute('Child'))
Session.save(pojoParent);
Ich denke, das ist Quatsch, aber ich habe es in einigen Projekten gesehen...
C) Setzen Sie die Beziehung zwischen Parent und Child als unveränderlich. Verwendung von aktualisierbar=false über die Beziehung kann ich jedes übergeordnete Feld aktualisieren, ohne mir Sorgen um den Verlust des untergeordneten Feldes zu machen. Wie auch immer, dies ist ziemlich restriktiv und die Beziehung wird nie aktualisiert werden.
Was ist Ihrer Meinung nach der beste Weg, diese Situation zu lösen?
Vielen Dank im Voraus!