删除一个元素删除其他元素的绑定很多很多Hibernate

时间:2014-08-16 17:50:36

标签: jsp spring-mvc many-to-many hibernate-mapping dao

有两个表:作者和书籍。多对多之间的沟通。

作者

@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,它会删除所有提及此作者的书籍

问题:在删除作者时,我应该怎么做,并删除了他的所有书籍,但如果该书有多位作者,那么本书中只删除了作者的价值。

1 个答案:

答案 0 :(得分:0)

我认为您不应该依赖于级联(您可以在此处阅读该问题:many-to-many cascade delete)并自行删除实体(例如:创建删除作者的服务并删除所有只由他拥有的书籍)。

您还可以尝试通过一个中间实体(如BookAuthor)来表示多对多,并具有以下内容:

预订&lt; - &gt; BookAuthor&lt; - &gt;作者

  • Book有一个“BookAuthor”列表(ManyToOne)
  • 作者有一个“BookAuthor”列表(ManyToOne)

这样,删除作者(使用cascade = delete)会破坏BookAuthor链接,但即使没有剩余的作者,也要保留Book。