Mi chiedevo quale sia il modo migliore per aggiornare alcuni campi di un oggetto dettached usando HB su Java. Specialmente quando l'oggetto ha attributi di oggetti figlio. Per esempio (annotazioni rimossi e campi numero ridotto per ridurre il rumore):Il modo migliore per aggiornare alcuni campi di un oggetto distaccato su Hibernate?
public class Parent {
int id;
String field2;
...
Child child;
}
public class Child {
int id;
String field3;
}
Quando si aggiorna un genitore in una webapp MVC ho potuto chiamare un'istanza genitore utilizzando Session.get (Parent.class, 123), usalo per compilare un modulo e visualizzarlo. Nessun DTO, solo il genitore distaccato viene passato alla vista e associato a un modulo. Ora, voglio solo consentire all'utente di aggiornare l'attributo campo2 del genitore. Quindi, quando l'utente invia il modulo, ottengo un'istanza Parent con id e field2 filled (penso che il framework mvc non abbia importanza qui, tutti si comportano per lo più allo stesso modo quando si esegue il binding).
Ora, quale strategia è la migliore per eseguire l'aggiornamento dell'entità? Posso pensare a poche alternative, ma voglio sentire gli esperti :) (ricordiamo che non voglio perdere il rapporto tra il genitore e il bambino le istanze)
A) Recupera l'istanza Parent dalla sessione di nuovo e sostituire a mano i campi aggiornati
Parent pojoParent; //binded with the data of the Form.
Parent entity = Session.get(Parent.class,pojoParent.getId());
entity.setField2(pojoParent.getField2()).
Sto usando questo molto. Ma il pojoParent sembra essere usato come DTO sotto copertura. Inoltre diventa terribile se il numero di campi da aggiornare diventa più grande.
B) Archiviare il Bambino da qualche parte (httpSession?) E associarlo a quest'ultimo.
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);
penso che questo è merda, ma l'ho visto in alcuni progetti ...
C) variare la relazione tra genitore e figlio, come inmutable. Usando aggiornabile = falso sulla relazione Posso aggiornare qualsiasi campo genitore senza preoccuparmi di perdere il bambino. Ad ogni modo, questo è abbastanza restrittivo e la relazione non verrà mai aggiornata.
Quindi, quale pensi sia il modo migliore per risolvere questa situazione?
Grazie in anticipo!