Cuál es la diferencia entre
@OneToMany(cascade=REMOVE, mappedBy="customer")
public List<Order> getOrders() { ... }
y
@OneToMany(mappedBy="customer", orphanRemoval="true")
public List<Order> getOrders() { ... }
Este ejemplo es del Tutorial de Java EE, pero todavía no entiendo los detalles.
java
jpa
cascading-deletes
rand0m86
fuente
fuente

Respuestas:
Desde aquí : -
fuente
Una forma sencilla de comprender la diferencia entre
CascadeType.REMOVEyorphanRemoval=true.Para eliminación de huérfanos: si invoca
setOrders(null), lasOrderentidades relacionadas se eliminarán en db automáticamente.Para eliminar cascada: si invoca
setOrders(null), lasOrderentidades relacionadas NO se eliminarán en db automáticamente.fuente
Supongamos que tenemos una entidad secundaria y una entidad matriz. Un padre puede tener varios hijos.
OrphanRemoval es un concepto ORM, indica si el niño es huérfano. también debe eliminarse de la base de datos.
Un niño queda huérfano cuando no se puede acceder a él desde su padre. Por ejemplo, si eliminamos el conjunto de objetos Persona (configurándolo en un conjunto vacío) o lo reemplazamos con un conjunto nuevo, el padre ya no podrá acceder a los hijos del conjunto anterior y los hijos quedarán huérfanos, por lo que los hijos están condenados a ser eliminado en la base de datos también.
CascadeType.REMOVE es un concepto de nivel de base de datos e indica si se elimina el padre, todos sus registros relacionados en la tabla secundaria deben eliminarse.
fuente
Prácticamente, la diferencia radica en si está intentando actualizar los datos (PATCH) o reemplazarlos por completo (PUT)
Supongamos que elimina el
customerque el usocascade=REMOVEtambién eliminará los pedidos de los clientes que parecen intencionados y útiles.Ahora digamos que actualiza un
customerconorphanRemoval="true"eliminará todos los pedidos anteriores y los reemplazará con el proporcionado. (PUTen términos deREST API)Sin
orphanRemovalviejos pedidos se mantendrían. (PATCHen términos deREST API)fuente
CascadeType.REMOVE
La
CascadeType.REMOVEestrategia, que puede configurar explícitamente:o heredarlo implícitamente de la
CascadeType.ALLestrategia:le permite propagar la
removeoperación de la entidad principal a sus entidades secundarias.Entonces, si buscamos la
Postentidad padre junto con sucommentscolección y eliminamos lapostentidad:Hibernate ejecutará tres declaraciones de eliminación:
Las
PostCommententidades secundarias se eliminaron debido a laCascadeType.REMOVEestrategia, que actuó como si también elimináramos las entidades secundarias.La estrategia de remoción de huérfanos
La estrategia de eliminación de huérfanos, que debe establecerse mediante el
orphanRemovalatributo:le permite eliminar la fila de la tabla secundaria al eliminar la entidad secundaria de la colección.
Entonces, si cargamos la
Postentidad junto con sucommentscolección y eliminamos la primeraPostCommentde lacommentscolección:Hibernate ejecutará una instrucción DELETE para la
post_commentfila de la tabla asociada :Para obtener más detalles sobre este tema, consulte también este artículo .
fuente