Добрый день.
В Hibernate при использовании аннотации ManyToMany создаются 3 таблицы. 2 таблицы для самих сущностей, где хранится информация и 1 таблица с маппингами, где хранятся id сущностей. В данном случае с вашими таблицами все в порядке.
У возвращаемого автора должны быть проинициализированы поля books и genres. Там должны находится
книги которые писал автор и жанры в которых он работал. В свою очередь у каждой книги должна быть
информация в каком жанре она написана и какие у нее авторы. А жанр должен хранить список книг относящихся к нему
и авторов работающих в данном жанре.
При такой работе (при сериализации данных или при вызове метода toString) вы столкнетесь с рекурсией. Например, у автора есть список книг, у книг есть авторы и каждый раз будут вызваны методы, которые будут запрашивать то авторов, которые написали эту книгу, то книги, которые был написаны этим автором. Эти вопросы при работе с Jackson решаются при помощи аннотаций JsonManagedReference & JsonBackReference или JsonIgnore. Для lombok для исключения из toString можно использовать ToString.Ignore.
Таким образом возвращая автора сервис слою мы должны загрузить кучу информации из базы данных, и это будет не один запрос, а очень много.
Если мы говорим о hibernate (jpa), то там есть таккие параметры, как FetchType (EAGER & LAZY). Так вот, если LAZY, то информация из List будет загружена только при обращении к ней. В случае EAGER информация загружается при первом же обращении к сущности.
https://thorben-janssen.com/entity-mappings-introd...
Возможно, что эта ссылка будет полезна для вас:
https://stackoverflow.com/questions/21956042/mappi...