Sto utilizzando JPA su Hibernate nella mia app Web. Qui ci sono due entità (solo sono indicati getter):jpa rimozione bambino dalla raccolta
class Child { private Parent parent; @ManyToOne(optional=false) @JoinColumn(name="parent_id", referencedColumnName="parent_id", nullable=false, updatable=false) public Parent getParent() { return parent; } } class Parent { private Collection children; @OneToMany(fetch=FetchType.EAGER, mappedBy="parent", cascade={CascadeType.ALL}) public Collection getChildren() { return children; } }
Come vedete Parent
e Child
riferiscono come "uno-a-molti".
Ora ho bisogno di caricare un'istanza Parent
, rimuovere alcuni o tutti i bambini e salvare le modifiche. Di seguito è riportato il codice che non funziona per me:
Parent p = entityManager.find(Parent.class, 12345L); // load entity p.getChildren().clear(); // remove all children entityManager.merge(p); // try to save
Le entità figlio non vengono rimosse nell'esempio sopra. Ora devo chiamare manualmente entityManager.remove()
per ogni bambino.
Esiste un modo più semplice per gestire la raccolta dei bambini? Si prega di notare che non voglio usare funzionalità specifiche di Hibernate, ma solo JPA puro.
saluti, Andrey
possibile duplicato del [JPA CascadeType.ALL non elimina orfani.] (Http: //stackoverflow.com/questions/306144/jpa-cascadetype-all-does-not-delete-orphans) –