example hibernate

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?