Persistencia
Spring Data
Relaciones
La capacidad de asociar datos entre tablas es una de las características de las BD relacionales. Por ejemplo, nuestro modelo define una relación N a 1 de las operaciones con sus usuarios y contadores. Sin embargo, dichas relaciones todavía no se han especificado en nuestras entidades JPA. Para verlo, vamos a implementar un nuevo endpoint que devuelva todas las operaciones que se han realizado sobre un contador.
❓ Ejercicio 1: Implementa en el API un recurso
GET /api/contadores/{nombre}/operaciones
que devuelva la lista deOperacion
cuyocontadorId
sea igual al del contador indicado en la petición. Prueba el nuevo endpoint, e indica el inconveniente de la respuesta JSON generada.
Para definir las relaciones entre los campos de las entidades se utilizan anotaciones: @ManyToOne
, @OneToOne
, @ManyToMany
, etc. Por ejemplo, para las relaciones de nuestro modelo:
@Entity public class Operacion {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Long id;
@ManyToOne(optional = false) public Usuario usuario;
@ManyToOne(optional = false) public Contador contador;
@Column(nullable = false) public String tipo;
@Column(nullable = false) public Timestamp fecha;
}
❓ Ejercicio 2: Cambia la entidad
Operacion
del proyecto JPA para que tenga las relaciones anteriores, y arregla el resto del código del API para que siga funcionando. Vuelve a probar el endpoint de operaciones del ejercicio 1, y observa los cambios en la respuesta JSON.
La BD, además de relacionar filas en diferentes tablas, evita1 que dichas referencias se rompan al actualizar o borrar. A continuación, vemos cómo las anotaciones JPA han incluido automáticamente dichas referencias y restricciones en la BD.
❓ Ejercicio 3: Intenta borrar un contador con el API REST. Explica porqué ahora falla mirando los logs del servidor. Añade esta anotación
@OnDelete(action = OnDeleteAction.CASCADE)
al campocontador
de la entidadOperacion
. Vuelve a intentar borrar el contador anterior, y explica el resultado mirando los contenidos de la tablaOperacion
en la consola de BD.
A esta característica se le llama integridad referencial.