У меня следующая модель: «классическая» ассоциация «многие ко многим» книга / автор, но с двумя особенностями.
- Автор не имеет связи с книгами.
- Персональные данные автора хранятся в другом связанном объекте, называемом Person.
Модель:
public class Book {
@ManyToMany
List<Author> authors;
}
public class Author {
@OneToOne
Person person;
}
public class Person {
String name;
}
Я хотел бы написать сервис, который, учитывая книгу, будет вернуть всех авторов, связанных с ним. Я также хотел бы получить личные данные, избегая проблемы N + 1.
В моем репозитории Book я написал собственный запрос вроде этого:
@Query("select b.authors from Book b join b.authors a join fetch a.person where b = :book")
List<Author> listAuthors(@Param("book") Book book);
Но у меня следующая ошибка:
запрос определил получение соединения, но владелец выбранной ассоциации не присутствовал в списке выбора (...)
Мне удалось решить эту проблему, добавив ассоциация с книгами на стороне автора и извлечение из нее человека. К сожалению, в моем случае очень желательно, чтобы Авторы не знали о Книгах.
Есть ли способ получить данные Человека из Книги?