这是一个概念性的例子,但我不明白如何实现它。
我有如下表格:
BOOK
------------
BOOK_ID
BOOK_AUTHOR
------------
BOOK_ID
AUTHOR_ID
AUTHOR
------------
AUTHOR_ID
以下hibernate对多个关系的映射:
书
@Entity
public class Book implements Serializable {
@ManyToMany(
targetEntity=org.hibernate.test.metadata.manytomany.Author.class,
cascade={CascadeType.PERSIST, CascadeType.MERGE}
)
@JoinTable(
name="BOOK_AUTHOR",
joinColumns=@JoinColumn(name="BOOK_ID"),
inverseJoinColumns=@JoinColumn(name="AUTHOR_ID")
)
public Collection getAuthors() {
return authors;
}
}
作者
@Entity
public class Author implements Serializable {
@ManyToMany(
cascade = {CascadeType.PERSIST, CascadeType.MERGE},
mappedBy = "authors",
targetEntity = Book.class
)
public Collection getBooks() {
return books;
}
}
然而,我生活在这样一个世界:书籍和作者必须拥有匹配的出版商,但是一本书可以在没有作者的情况下存在,而作者可以在没有书籍的情况下存在。所以,在我的表格中,我添加了一个发布商ID:
BOOK
------------
BOOK_ID
PUBLISHER_ID
BOOK_AUTHOR
------------
BOOK_ID
AUTHOR_ID
PUBLISHER_ID
AUTHOR
------------
AUTHOR_ID
PUBLISHER_ID
这在数据库层中,意味着发布者ID必须匹配所有三个表,这意味着一本书和作者必须具有相同的发布者,但是如何使用hibernate映射实现它?