Tengo un problema con una asignación simple @OneToMany
entre una entidad principal y una entidad secundaria. Todo funciona bien, solo que los registros secundarios no se eliminan cuando los elimino de la colección.JPA OneToMany no elimina hijo
El padre:
@Entity
public class Parent {
@Id
@Column(name = "ID")
private Long id;
@OneToMany(cascade = {CascadeType.ALL}, mappedBy = "parent")
private Set<Child> childs = new HashSet<Child>();
...
}
El niño:
@Entity
public class Child {
@Id
@Column(name = "ID")
private Long id;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name="PARENTID", nullable = false)
private Parent parent;
...
}
Si ahora borro y el niño desde el conjunto del niño, no se borran de la base de datos. Traté de anular la referencia child.parent
, pero eso tampoco funcionó.
Las entidades se utilizan en una aplicación web, la eliminación se produce como parte de una solicitud de Ajax. No tengo una lista de hijos eliminados cuando se presiona el botón Guardar, por lo que no puedo eliminarlos implícitamente.
gracias a la buena explicación. entonces es como temí (Hice un poco de búsqueda/lectura antes de que preguntara, solo quería estar a salvo). de alguna manera, comienzo a lamentar la decisión de utilizar JPA API y nit Hibernate directamente ... Voy a probar el puntero Chandra Patni y utilizar el tipo de cascada hibernate delete_orphan. – bert
Tengo un tipo de pregunta similar sobre esto. Sería bueno echar un vistazo a este post aquí, por favor? http://stackoverflow.com/questions/4569857/jsf-how-to-update-the-list-after-delete-an-item-of-that-list –
Con JPA 2.0, ahora puede usar la opción orphanRemoval = true – itsadok