OneToMany
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