- Tenemos una tabla Padre que puede tener de 1 a N registros de la tabla Hijo asociados.
- Tenemos configurado las clases correctamente con JPA. Y en la clase Padre hemos indicado que contiene un conjunto de objetos Hijos, e indicamos esta relación con la anotación 'OneToMany'.
@OneToMany(mappedBy="padre_pk") public ListgetHijos() { ... }
Según lo que conocemos de JPA. Si un padre tiene un listado de hijos, borramos uno de ellos y hacemos una operación de 'update' sobre el objeto padre. JPA debería encargarse de actualizar los datos del registro y además borrar la relación padre-hijo eliminada.
Pero esta configuración no es suficiente, y al realizar el update cambiara los datos de la tabla padre pero no borrará las relaciones de la tabla hijo que se hayan eliminado. Para ello hay que realizar el siguiente cambio en la configuración JPA:
@OneToMany(mappedBy="padre_pk", orphanRemoval="true") public ListgetHijos() { ... }
Con esta configuración al realizar el update ya borrara aquellos hijos que se queden 'huerfanos'.
Duda extra: ¿Porque no funciona si además en la anotación OneToMany se indico anteriormente 'cascade=CascadeType.ALL' o 'cascade=CascadeType.REMOVE'?
Pues porque esa configuración solo nos permite borrar los hijos asociados a un registro padre, cuando es el propio padre el que se borra.
No hay comentarios:
Publicar un comentario