在编写书店应用程序时,我需要为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"/>
...
答案 0 :(得分:1)
您需要映射集合(<x-to-many>
)并将其设置为cascade=all
。这意味着如果删除集合的所有者,集合元素也将被删除。
请注意,您还可以选择使用注释而不是xml。那将是@OneToMany(cascade=CascadeType.ALL)