Хорошая ли практика использовать @JoinTable в обоих Entity для двунаправленного соединения Many-toMany?
Всем добрый день!
Задался таким вопросом. Предположим есть две сущности Автор и Книги. Связь у них многие ко многим.
Я могу создать двунаправленную связь в java двумя вариантами:
- Использовать для класса Автор аннотацию @JoinTable, а для Книг @ManyToMany(mappedBy...)
@Entity
public class Book {
@Id
private int book_id;
@ManyToMany(mappedBy = "books")
private List<Author> authors;
private List<Author> authors;
}
@Entity
public class Author {
@Id
private int author_id;
@ManyToMany
@JoinTable(name = "author_x_book"
, joinColumns = @JoinColumn(name = "author_id")
, inverseJoinColumns = @JoinColumn(name = "book_id"))
private List<Book> books;
}
В этом случае у меня сгенерится 3 таблицы. В Java если я удалю Книгу у Автора и сохраню автора, то запись из таблицы удалится.
Если же я попробую у Книги удалить Автора и сохранить книгу, то запись не удалится
Однако если вместо
@ManyToMany(mappedBy = "books")
я напишу
@ManyToMany
@JoinTable(name = "author_x_book"
, joinColumns = @JoinColumn(name = "book_id")
, inverseJoinColumns = @JoinColumn(name = "author_id"))
то я смогу в Java и у Автора удалять книги, и у Книги удалять авторов - при записи объектов будут выполняться sql запросы.
Подскажите, могу ли я так делать? Не использовать @ManyToMany(mappedBy... , если мне хочется добавлять и удалять объекты и у книг и у авторов? Или по каким-то причинам это нехорошая практика ?