Хорошая ли практика использовать @JoinTable в обоих Entity для двунаправленного соединения Many-toMany?

Всем добрый день!

Задался таким вопросом. Предположим есть две сущности Автор и Книги. Связь у них многие ко многим.

Я могу создать двунаправленную связь в java двумя вариантами:

  1. Использовать для класса Автор аннотацию @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... , если мне хочется добавлять и удалять объекты и у книг и у авторов? Или по каким-то причинам это нехорошая практика ?


Ответы (0 шт):