【问题标题】:Remove one element removes the binding of other elements Many to Many Hibernate移除一个元素移除其他元素的绑定 多对多 Hibernate
【发布时间】:2014-08-16 17:50:35
【问题描述】:

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

作者

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

问题:删除作者时我应该怎么做,并且已经删除了他的所有书籍,但是如果该书有多个作者,则将其删除为仅该作者在本书中的值。

【问题讨论】:

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


    【解决方案1】:

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

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

    图书 BookAuthor 作者

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

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

    【讨论】:

    • 很遗憾不能通过级联来实现((然后我会在服务中写一个触发器。仍然希望有一些级联的变体
    • 感谢触发一切正常。这就是希望通过使用级联来实现这一点(((我该死的 3 天坐在困惑中,尽管有可能 10 分钟来编写触发器(((
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 2013-04-22
    • 2011-07-15
    相关资源
    最近更新 更多