作者
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "authorList",cascade= {CascadeType.PERSIST} )
private List<Book> bookList;
书
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name= "author_book",
joinColumns = {@JoinColumn(name="book_id",nullable=false)},
inverseJoinColumns = {@JoinColumn(name="author_id",nullable = false)})
private List<Author> authorList;
表
Book1(Author1)
Book2(Author1, Author2)
在本实施例中,如果作者删除该表,则采用表格
Book1()
Book2(Author2)
如果我输入类作者级联Cascade.ALL,它会删除所有提及此作者的书籍
问题:在删除作者时,我应该怎么做,并删除了他的所有书籍,但如果该书有多位作者,那么本书中只删除了作者的价值。
答案 0 :(得分:0)
我认为您不应该依赖于级联(您可以在此处阅读该问题:many-to-many cascade delete)并自行删除实体(例如:创建删除作者的服务并删除所有只由他拥有的书籍)。
您还可以尝试通过一个中间实体(如BookAuthor)来表示多对多,并具有以下内容:
预订&lt; - &gt; BookAuthor&lt; - &gt;作者
这样,删除作者(使用cascade = delete)会破坏BookAuthor链接,但即使没有剩余的作者,也要保留Book。