使用复合键多次休眠,在关系的任一侧共享一个字段

时间:2011-08-17 15:29:30

标签: java hibernate many-to-many

这是一个概念性的例子,但我不明白如何实现它。

我有如下表格:

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映射实现它?

0 个答案:

没有答案