Каков наилучший способ изменить отношения n-n-n между двумя сущностями в JPA.
Позвольте мне объяснить на примере: предположим, у меня есть и сущность Author
и Book
,где Book
может иметь различные Author
с, а Author
может писать на различных Book
с.Эта модель представлена в виде отношения n-to-n:
@Entity
public class Author {
@ManyToMany(fetch=FetchType.EAGER)
private List<Book> books;
// ...
}
Также:
@Entity
public class Book {
@ManyToMany(fetch=FetchType.EAGER)
private List<Author> authors;
// ...
}
Я хочу выполнить серию операций в этих объектах - например, пометитьAuthor
в качестве автора Book
:
public class SomeService {
public void addAuthor(Book book, Author author) {
book.getAuthors().add(author);
em.persist(book);
}
}
или удаления Book
из книг Author
:
public class SomeOtherService {
public void removeBook(Author author, Book book) {
author.getBooks().remove(book);
em.persist(author);
}
}
Однако я быхотел бы, чтобы обновление было зарегистрировано в сущности, которая также не обновляется.Когда я звоню addAuthor()
, я ожидаю, что обновленный Book
также будет присутствовать в списке книг Author
.Я хочу, чтобы Author
был удален из списка Book
авторов при вызове removeBook()
.
Если код такой, как приведенный выше, этого не происходит.Мое текущее решение состоит в том, чтобы выполнить соответствующую операцию в обеих сущностях, более или менее как показано ниже:
public class SomeService {
public void addAuthor(Book book, Author author) {
book.getAuthors().add(author);
author.getBooks().add(book);
em.persist(book);
em.persist(author);
}
}
Хотя это выглядит для меня неудачным решением.Итак, мой вопрос: есть ли лучший способ сделать это?
Заранее спасибо?