Paso 3: CRUD Editorial - Book - Explicación del código
Anotaciones en las clases Entity
Las anotaciones en las clases Entity para indicar la relación entre Editorial y Book y entre Book y Editorial son las siguientes:
BookEntity
La clase BookEntity define un atributo para la relación con editorial. Este atributo tiene la anotación @ManyToOne para indicar que hay muchos libros relacionados con la misma editorial pero un libro solo tiene una editorial.
EditorialEntity
La clase EditorialEntity define un atributo para la relación con la colección de libros. Este atributo tiene la anotación @OneToMany para indicar que hay muchos libros relacionados con la misma editorial pero un libro solo tiene una editorial.
Es importante notar el atributo mappedBy = "editorial". Este valor contiene el nombre del atributo en la clase destino correspondiente con esta relación (podría haber varias relaciones distintas desde book a editorial). El que este atributo este definido en EditorialEntity significa que BookEntity es el lado propietario de la relación (the owning side), es decir, en la base de datos, en la tabla de BOOK cada fila guardará la llave foráneas de la editorial a la que pertenece. La figura muestra la estructura física de las tablas, donde vemos que e la tabla de BOOKENTITY tiene el EDITORIAL_ID como llave foránea:

Definición del subrecurso EditorialBooksResource
La clase EditorialResource está anotada con el path editorials. Lo que significa que todos los servicios HTTP que tengan una url que comienza por:
urlsevidor/api/editorials se buscarán en este archivo.
La clase tiene definido el siguiente método:
todos los servicios HTTP que tengan una url que comienza por:
urlsevidor/api/editorials/{editorialsId: \\d+}/books entrarán a este método que hacer dos cosas:
- Validar que la editorial con identificador editorialsId exista. Si no existe, dispara la excepción.
- Redirecciona el llamado al subrecurso definido en la clase
EditorialBooksResource.
La clase EditorialBooksResource no tiene un path al inicio de la clase pero todos los métodos anotados con GET/POST/PUT/DELETE deben declarar un parámetro:
@PathParam("editorialsId")Long editorialsId que corresponde con el path del método donde se redireccionó al subrecurso.