...
| Bloque de código | ||
|---|---|---|
| ||
@GeneratedValue(generator = "comunicacionID") |
Evitar dependencias circulares: @JsonBackReference y @JsonManagedReference
Para evitar dependencias circulares al obtener objetos de base de datos y serializarlos, disponemos de las anotaciones @JsonBackReference y @JsonManagedReference, que utilizaremos sobre los atributos que forman la relación bidireccional.
- @JsonManagedReference se utiliza en la clase "padre" de la relación bidireccional, es decir, la que se mostrará de forma normal.
- @JsonBackReference es en el que sería el "hijo", la parte que se omitirá al ser serializado.
Podemos poner el siguiente ejemplo, con una clase User que tiene una lista de Item, y la clase Item que tiene un atributo User. Si queremos que al obtener el Item se incluya su User, pero que al mostrar este User se omita la lista de Items (lo que generaría un bucle infinito), pondríamos las anotaciones así:
| Bloque de código | ||
|---|---|---|
| ||
public class User {
public int id;
public String name;
@JsonBackReference
public List<Item> userItems;
}
public class Item {
public int id;
public String itemName;
@JsonManagedReference
public User owner;
} |
Así, un ejemplo de respuesta al obtener un Item sería este:
| Bloque de código | ||
|---|---|---|
| ||
{
"id":2,
"itemName":"book",
"owner":
{
"id":1,
"name":"John"
}
} |
JpaRepository
Completados los pasos previos podemos definirnos nuestro repositorio. Se ha de crear una interfaz que extienda a JpaRepository parametrizado con el tipo correspondiente, y utilizando la anotación @Repository. Siguiendo con nuestro ejemplo, tendríamos:
...