🌱 Digital Garden

Search

Search IconIcon to open search

Last updated Jul 20, 2023 Edit Source

Quizas ver primero:


# Cascade Operations en Spring

# Objetivos

# 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:

Para modificar los estados necesitamos utilizar metodos especiales contenidos en la clase EntityManager. Los estados mas utilizados suelen ser los siguientes:

Preguntas extra para contestar despues:

# 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.

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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Entity
class Customer {
	@Column(name = "customer_id")
	@GeneratedValue(strategy = "GenerationType.AUTO")
	private long customerId;
	
	private String name;
	private String email;

	@OneToMany(mappedBy = "customer", cascade = "CascadeType.ALL")
	private List<Order> orders;
}

@Entity
class Order {
	@GeneratedValue(strategy = "GenerationType.AUTO")
	private long orderId;
	
	private String articleName;

	@ManyToOne
	@JoinColumn(name = "customer_id")
	private Customer customer;
}

Siguiente: