Quizas ver primero:
# Cascade Operations en Spring
# Objetivos
- ¿Qué son las Cascade Operations? Son una forma de marcar el comportamiento que se tendra al realizar cambios en entidades que guardan relacion entre si
- ¿Cómo se utilizan? Se utilizan escribiendo el tipo de comportamiento deseado dentro de la anotacion que guarda las relaciones entre entidades (@OneToMany, @OneToOne, etc)
- ¿Para qué sirven? Sirven para resolver los problemas que se podrian generar de hacer cambios en una tabla (al modificar una entidad) y en otra no.
- ¿Qué son los JPA entity states? Son los distintos estados que puede tener una entidad respecto a la forma de persistir en una base de datos.
- ¿Por qué debemos conocerlos antes de entrar a conocer las operaciones? Debido a que las operaciones estan basadas fuertemente con ellos. Las operaciones definen los entity states que pueden cambiar en las entidades relacionadas a la entidad que guarda la relacion (la que tiene el CascadeType)
- ¿Cuáles son los distintos tipos de Cascade Operations que existen? Son los mismos que los Entity States con la diferencia de que existe la operacion ALL para especificar que cualquier operacion hecha a una entidad afectara a las relacionadas.
- ¿Qué funciones cumple cada una? Persistir, no persistir, remover, no manejar. Son iguales a los entity states
- ¿Cómo se relacionan con las relaciones entre entidades? Debido a que marcan los comportamientos que se tendra entre las relaciones que existen entre dos entidades. Por tanto no solo se relacionan si no que estan construidas en base a las relaciones que pueden existir en un RDBMS.
# Introduccion
Cascade Operations. Son operaciones especiales que se pueden definir en las anotaciones de las relaciones que existen entre entidades en Spring Data JPA 117. JPA relationships.
Sirven mara modificar el comportamiento y las interacciones que ocurren entre las entidades cuando una es eliminada, de modo que modifique y deje claro el estado de las entidades que estaban relacionadas a ella.
# JPA Entity States
Lo primero que debemos entender son unas nociones de los JPA Entity States. Estos son definidos al momento de crear las distitnas clases marcadas con @Entity.
Los dos estados mas populares que podemos ver son:
- transient. Es el valor por defecto cuando se crea una entidad usando el keyword new.
- persistent. Hace que la entidad persista a traves de la aplicacion. Se necesita del EntityManager
Para modificar los estados necesitamos utilizar metodos especiales contenidos en la clase EntityManager. Los estados mas utilizados suelen ser los siguientes:
- detach. Para qutar una entidad y que no sea manejada por el EntityManager
- remove. Para remover del medio de persistencia (BD o otro)
- merge. Para agregar una entidad y que vuelva a ser manejada por el EntityManager
Preguntas extra para contestar despues:
- ¿De qué me sirve modificar los estados?
- ¿Cómo utilizo el EntityManager para cambiar los estados?
- ¿Qué es el EntityManager en si?
- ¿Cómo se relaciona con JpaRepository y CrudRepository?
# JPA Cascade Operations
Lo que hay que entender y el CORE de las Cascade Operations son los Entity States puesto que estan fuertemente relacionados. Veamos algunas operaciones disponibles y de inmediato empiezan a existir relaciones entre ellos.
- ALL
- PERSIST
- DETACH
- REMOVE
- MERGE
- REFRESH
Como se puede imaginar cada operacion esta relacionada con su respectivo proveniente de los metodos de un EntityManager. (DETACH = .detach(), REMOVE = .remove(), etc)
Cada una de estas operaciones especifica los compotamientos bajo los distintos estados. Sin embargo, la mas utilizada y la que probablemente solucionara mayor cantidad de problemas es ALL. Esta marca que cualquier cambio ocurrido con una Entidad padre debe afectar todas las entidades relacionadas a ella.
Estas distintas Cascade Operations deben estar marcadas en las anotaciones que contienen las relaciones entre entidades.
Veamos un ejemplo. Un Customer puede tener muchos Orders, por tanto es una relacion @OneToMany:
| |
Siguiente: