Tengo un problema con una @OneToMany
asignación simple 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.
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 elimino un elemento secundario del conjunto de elementos secundarios, no se eliminará de la base de datos. Intenté anular la child.parent
referencia, pero eso tampoco funcionó.
Las entidades se utilizan en una aplicación web, la eliminación ocurre como parte de una solicitud de Ajax. No tengo una lista de niños eliminados cuando se presiona el botón Guardar, por lo que no puedo eliminarlos implícitamente.
Además de la respuesta de cletus, JPA 2.0 , final desde diciembre de 2010, introduce un
orphanRemoval
atributo en las@OneToMany
anotaciones. Para más detalles vea esta entrada del blog .Tenga en cuenta que, dado que la especificación es relativamente nueva, no todos los proveedores de JPA 1 tienen una implementación final de JPA 2. Por ejemplo, la versión Hibernate 3.5.0-Beta-2 aún no admite este atributo.
fuente
Puedes probar esto:
@OneToOne(orphanRemoval=true) or @OneToMany(orphanRemoval=true)
.fuente
Como se explicó, no es posible hacer lo que quiero con JPA, así que utilicé la anotación hibernate.cascade, con esto, el código relevante en la clase Parent ahora se ve así:
No podría simplemente usar 'ALL' ya que esto también habría eliminado al padre.
fuente
Aquí cascada, en el contexto de eliminar, significa que los hijos se eliminan si eliminas al padre. No es la asociación. Si está utilizando Hibernate como su proveedor JPA, puede hacerlo utilizando la cascada específica de hibernate .
fuente
Puedes probar esto:
o
fuente
Ver aquí .
fuente