【问题标题】:using hibernate to delete publisher with no books使用休眠删除没有书籍的出版商
【发布时间】:2011-10-09 02:01:04
【问题描述】:

在编写书店应用程序时,我需要为 Book 和 Publisher 类放置映射。

Book 与 Publisher 具有 n 对 1 关系。与 Author 也具有 n 对 1 关系。 我想为管理员用户提供删除书籍、作者或出版商的选项。

没有书的出版商是没有意义的。作者也是如此。如果出版商的所有书都被删除,出版商必须从数据库中删除。 如果一个作者的所有书籍都被删除,该作者也应该被删除。 听起来像是 delete-orphan 级联。但是多对一映射不支持 delete-orphan 。

另外,如果我删除一个出版商,他的所有书籍都应该被删除。 同样,删除作者应该删除他的所有书籍。

目前,我的 Author、Publisher 和 Book 类定义如下, 这本书有字段作者和出版商。但是,作者或出版商,没有参考他们的书。 我必须重新定义这些类吗? 我应该如何映射 Book 和 Publisher 之间的关系?

任何帮助表示赞赏

public class Book {
    private Long bookId;    
    private Author author;
    private Publisher publisher;
...
}

public class Publisher {
    private Long publisherId;   
    private String name;        
}

public class Author {
    private Long authorId;
    private String name;    
}

<class name="Book" table="BOOKS">
    <id name="bookId" column="BOOKID" type="long">
    <generator class="native"/>
    </id>
    ...
    <many-to-one name="publisher" class="Publisher"   column="PUBLISHERID" lazy="false" cascade="save-update"/>
  ...

【问题讨论】:

    标签: java hibernate cascade


    【解决方案1】:

    您需要映射一个集合 (&lt;x-to-many&gt;) 并将其设置为 cascade=all。这意味着如果您删除集合的所有者,集合元素也会被删除。

    请注意,您还可以选择使用注释而不是 xml。然后是@OneToMany(cascade=CascadeType.ALL)

    【讨论】:

    • 您可能也想删除孤儿... @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    • 这是否意味着 Author 和 Publisher 类包含参考书集?
    猜你喜欢
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 2013-05-25
    • 2011-02-16
    • 2012-02-07
    • 2010-11-03
    相关资源
    最近更新 更多