hibernate - example - ¿Cuál es la diferencia entre DELETE_ORPHAN y DELETE?
hibernate pdf (1)
BORRAR en cascada significa que si se elimina esta entidad, elimine la entidad o entidades relacionadas.
DELETE_ORPHAN significa que si una entidad se elimina de una colección de uno a varios relacionada, no solo la desasociará de la entidad actual, sino que la eliminará.
Para darle un ejemplo, considere dos entidades: Casa y Habitación.
BORRAR en la lista de habitaciones en la Casa significa que si elimina la Casa, elimine todas sus Habitaciones.
DELETE_ORPHAN en la lista Habitación en Casa significa que si elimina una Habitación de esa colección, elimínela por completo. Sin ella, la habitación aún existiría pero no estaría vinculada a nada (de ahí a "huérfana").
En términos de modelado UML y OO, esta es básicamente la diferencia entre composición y agregación. La relación Casa-> Habitación es un ejemplo de composición. Una habitación es parte de una casa y no existe de forma independiente.
Un ejemplo de agregación es, por ejemplo, Clase (padre) a Estudiante (niño). Eliminar la clase y el estudiante todavía existe (sin duda en otras clases). Eliminar al alumno de la clase no significa, por lo general, que se elimine.
Aquí está el código fuente:
@OneToOne(fetch = FetchType.LAZY)
@Cascade({SAVE_UPDATE, EVICT, DELETE})
@JoinColumn(name = "A_ID", nullable = true)
private A a;
@OneToMany
@Cascade({SAVE_UPDATE, EVICT, DELETE, DELETE_ORPHAN})
@JoinColumn(name = "B_ID")
private List<B> bList;
¿Cuál es la diferencia entre DELETE_ORPHAN y DELETE?