Ho un problema con un semplice mapping @OneToMany
tra un'entità padre e un'entità figlio. Tutto funziona bene, solo i record figlio non vengono cancellati quando li rimuovo dalla raccolta.JPA OneToMany non elimina child
Il genitore:
@Entity
public class Parent {
@Id
@Column(name = "ID")
private Long id;
@OneToMany(cascade = {CascadeType.ALL}, mappedBy = "parent")
private Set<Child> childs = new HashSet<Child>();
...
}
Il bambino:
@Entity
public class Child {
@Id
@Column(name = "ID")
private Long id;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name="PARENTID", nullable = false)
private Parent parent;
...
}
Se ora cancello e bambino dal bambino Set, non vengono eliminati dal database. Ho provato ad annullare il riferimento child.parent
, ma non ha funzionato neanche.
Le entità vengono utilizzate in un'applicazione Web, l'eliminazione avviene come parte di una richiesta Ajax. Non ho un elenco di child eliminati quando viene premuto il pulsante Save, quindi non posso eliminarli implicitamente.
grazie della bella spiegazione. quindi è come temevo. (Ho fatto qualche ricerca/lettura prima di chiedere, volevo solo essere salvato). in qualche modo mi metto deplorando la decisione di utilizzare JPA API e nit Hibernate direttamente .. cercherò puntatore Chandra Patni e utilizzare l'ibernazione delete_orphan tipo a cascata. – bert
Ho una domanda simile a riguardo. Sarebbe carino dare un'occhiata a questo post qui, per favore? http://stackoverflow.com/questions/4569857/jsf-how-to-update-the-list-after-delete-an-item-of-that-list –
Con JPA 2.0, ora puoi utilizzare l'opzione orphanRemoval = true – itsadok