Tengo problemas para eliminar nodos huérfanos usando JPA con la siguiente asignación
@OneToMany (cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "owner")
private List<Bikes> bikes;
Tengo el problema de los roles huérfanos en la base de datos.
Puedo usar la org.hibernate.annotations.Cascade
etiqueta específica de anotación Hibernate, pero obviamente no quiero vincular mi solución a una implementación de Hibernate.
EDITAR : Parece que JPA 2.0 incluirá soporte para esto.
Si está utilizando JPA 2.0, ahora puede usar el
orphanRemoval=true
atributo de la@xxxToMany
anotación para eliminar a los huérfanos.En realidad,
CascadeType.DELETE_ORPHAN
ha quedado en desuso en 3.5.2-Final.fuente
fuente
cascade = CascadeType.ALL, orphanRemoval = false
y elimino al padre? ¿Eliminará a los niños, aunque específicamente le dije que NO lo haga?Si está utilizando JPA con EclipseLink, deberá establecer la anotación @PrivateOwned .
Documentación: Wiki de Eclipse - Uso de las extensiones JPA de EclipseLink - Capítulo 1.4 Cómo usar la anotación @PrivateOwned
fuente
puedes usar @PrivateOwned para eliminar huérfanos, por ejemplo
fuente
Acabo de encontrar esta solución, pero en mi caso no funciona:
orphanRemoval = true no tiene ningún efecto.
fuente
Según Java Persistence with Hibernate , la eliminación huérfana en cascada no está disponible como una anotación JPA.
Tampoco es compatible con JPA XML.
fuente
Tuve el mismo problema y me preguntaba por qué esta condición a continuación no eliminó a los huérfanos. La lista de platos no se eliminó en Hibernate (5.0.3.Final) cuando ejecuté una consulta de eliminación con nombre:
Entonces recordé que no debo usar una consulta de eliminación con nombre , sino el EntityManager. Como utilicé el
EntityManager.find(...)
método para obtener la entidad y luegoEntityManager.remove(...)
eliminarla, los platos también se eliminaron.fuente
Justo
@OneToMany(cascade = CascadeType.ALL, mappedBy = "xxx", fetch = FetchType.LAZY, orphanRemoval = true)
.Eliminar targetEntity = MyClass.class , funciona muy bien.
fuente
Para los registros, en OpenJPA antes de JPA2 era @ElementDependant.
fuente
Estaba usando el mapeo uno a uno, pero el niño no estaba siendo eliminado JPA estaba infringiendo una clave foránea
Después de usar orphanRemoval = true, el problema se resolvió
fuente