Aprendimos sobre la asignación de entidades asociadas en hibernación ya en tutoriales anteriores, como la asignación de uno a uno y las asignaciones de uno a muchos. Allí queríamos guardar la entidad asignada cada vez que se guardara la entidad propietaria de la relación. Para habilitar esto, usamos el atributo «CascadeType». En este tutorial de Tipos de cascada de JPA, aprenderemos sobre varios tipos de opciones disponibles para conectar en cascada a través de CascadeType.
¿Cómo Funcionan los Tipos de Cascada JPA?
Antes de seguir adelante, veamos cómo se define este atributo de tipo cascada en su código. Vamos a tener un ejemplo para una comprensión más clara. Tomemos un escenario en el que un empleado puede tener varias cuentas, pero una cuenta debe estar asociada a un solo empleado. Vamos a crear entidades con un mínimo de información en aras de la claridad.
Entidad de empleo.cuenta java
.java
Mire la línea en negrita en el código fuente anterior para EmployeeEntity.java
. Se define «cascade=CascadeType.ALL
» y significa que cualquier cambio ocurrido en el EmployeeEntity
debe cascada a AccountEntity
así. Si guarda a un empleado, todas las cuentas asociadas también se guardarán en la base de datos. Si elimina a un empleado, también se eliminarán todas las cuentas asociadas a ese empleado. Bastante Simple.
Pero, ¿qué pasa si solo queremos guardar en cascada las operaciones, pero no eliminar la operación? Entonces necesitamos especificarlo claramente usando el siguiente código.
Ahora solo cuando se llama a los métodos save() o persist() usando instancia de empleado, solo se persistirán las cuentas. Si se llama a cualquier otro método en la sesión, su efecto no afectará/en cascada a las cuentas.
Tipos de cascada JPA
Los tipos de cascada soportados por la arquitectura de persistencia Java son los siguientes:
- CascadeType.PERSIST: tipo de cascada
presist
significa que las operaciones save() o persist() se ejecutan en cascada a entidades relacionadas. - Tipo de cascada.FUSIONAR : el tipo de cascada
merge
significa que las entidades relacionadas se fusionan cuando se fusiona la entidad propietaria. - Tipo de cascada.REFRESH: cascade type
refresh
hace lo mismo para la operación refresh (). - Tipo de cascada.ELIMINAR: tipo en cascada
remove
elimina todas las asociaciones de entidades relacionadas con esta configuración cuando se elimina la entidad propietaria. - Tipo de cascada.SEPARAR: el tipo de cascada
detach
separa todas las entidades relacionadas si se produce una» separación manual». - Tipo de cascada.TODO : el tipo de cascada
all
es una abreviatura de todas las operaciones en cascada anteriores.
No hay un tipo de cascada predeterminado en JPA. De forma predeterminada, no hay operaciones en cascada.
La opción de configuración en cascada acepta una matriz de tipos en cascada; por lo tanto, para incluir solo actualizaciones y fusiones en la operación en cascada para una relación de Uno a muchos, como en nuestro ejemplo, puede ver lo siguiente:
La conexión en cascada hará que la recopilación de cuentas solo se fusione y actualice.
Tipos de cascada de hibernación
Ahora vamos a entender qué es la cascada en hibernación en qué escenario la usamos.
Aparte de los tipos de cascada proporcionados por JPA, hay una operación de cascada más en hibernate que no forma parte del conjunto normal mencionado anteriormente, llamada «eliminación huérfana». Esto elimina un objeto de propiedad de la base de datos cuando se elimina de su relación de propiedad.
Entendamos con un ejemplo. En nuestro ejemplo de Entidad de cuenta y empleado, los he actualizado como se muestra a continuación y he mencionado «orphanRemoval = true» en las cuentas. Esencialmente significa que cada vez que voy a eliminar una «cuenta de conjunto de cuentas» (lo que significa que estoy eliminando la relación entre esa cuenta y el Empleado); la entidad de la cuenta que no está asociada con ningún otro empleado en la base de datos (es decir, huérfana) también debe eliminarse.
Entidad de empleo.cuenta java
.java
TestOrphanRemovalCascade.java
Es una muy buena manera de eliminar los elementos coincidentes/no coincidentes de una colección (es decir, relaciones de muchos a uno o de uno a muchos). Solo tienes que quitar el artículo de la colección e hibernar, encargarte del resto de las cosas por ti. Comprobará si se hace referencia a la entidad desde cualquier lugar o no; Si no lo es, eliminará la entidad de la propia base de datos.
Hágame saber sus pensamientos y preguntas sobre los tipos de cascada hibernate 5 o los tipos de cascada JPA, si los hay.
Feliz Aprendizaje !!
Blog de Oracle sobre tipos de cascada