Отношения могут быть однонаправленными или двунаправленными.
То, как вы спроектировали его в своем коде Java, это двунаправленный. Это означает, что одно и то же физическое отношение (материализованное внешним ключом) рассматривается как два логических отношения:
- с точки зрения книги: несколько книг издано одним издателем (ManyToOne)
- с точки зрения издателя: один издатель публикует несколько книг (OneToMany)
XML-отображение, которое вы показываете в своем вопросе, описывает одну сторону отношений. Но если вы хотите сделать это двунаправленным, вы также должны объявить другую сторону. Одна из сторон объявлена обратной.
Hibernate дает вам выбор: у вас может быть коллекция книг в классе издателей (однонаправленная одна ко многим) или ссылка на издателя в классе книг (однонаправленная много к одному), или и то и другое (двунаправленная одна ко многим / много к одному).
Прочитайте документацию для более подробной информации.