OneToMany

Veja aqui.

Na classe PublisherModel, importamos a coleção (set) de Books e passaremos as anotações.

  • OneToMany - Pois são várias editoras, para um só livro.

    • Passaremos o mappedBy = "publisher"

    • fetch = FetchType.Lazy.

  • @JsonProperty - Imagine que um cliente vai solicitar via API alguns detalhes de uma determinada Publisher. Ele vai esperar por uma coleção (set) de livros, mas, como o nosso carregamento está Lazy, muitas vezes essa coleção não estará disponível.

    Então, passamos (access = JsonProperty.Access.WRITE_ONLY) e não dará nenhum erro de serialização na leitura.

O mappedBy nada mais é do que o nome da importação na outra classe. Se vermos na classe BookModel a classe PublisherModel foi importada com a variável publisher.

O fetch como Lazy define um carregamento mais lento e só será feito também quando necessário.

Se fosse um EAGER, ele sempre buscaria a editora (publisher) na base de dados e também carregaria tudo automaticamente, trazendo cada um dos livros que fazem parte da editora, podento gerar até mesmo loops.

Isso não é sempre necessário, portanto, o Lazy é o mais adequado.

Isso irá nos permitir então buscar, por exemplo, um livro que pertence a uma editora específica, pois o mapeamento foi feito.

Atualizado