使用hibernate删除没有书籍的发布者

时间:2011-07-20 04:44:41

标签: java hibernate cascade

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

Book与Publisher具有n对1的关系。与作者n对1也是如此。 我想给管理员用户一个删除书籍,作者或出版商的选项。

没有书籍的出版商没有任何意义。作者就是这种情况。如果发布者的所有书籍都被删除,则必须从数据库中删除出版商。 如果作者的所有书籍都被删除,则还应删除作者。 这听起来像是一个删除孤儿级联。但是多对一映射不支持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"/>
  ...

1 个答案:

答案 0 :(得分:1)

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

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