【发布时间】:2015-08-19 23:28:45
【问题描述】:
我有一个有趣的用例,我希望 Hibernate 管理与同一实体类型的多个一对多关系。
例如:BookShelf fictionBooks 与 Book 的关系,还有 BookShelf nonFictionBooks 映射到图书。 Hibernate 映射看起来像这样:
<class name="com.example.BookStore" table="BOOK_SHELF">
<id name="id" type="long" column="bookShelfId">
<generator class="native" />
</id>
<set name="fictionBooks" table="SHELF_BOOK" cascade="all-delete-orphan" lazy="false">
<key column="bookShelfId" />
<one-to-many class="com.example.Book" />
</set>
<set name="nonFictionBooks" table="SHELF_BOOK" cascade="all-delete-orphan" lazy="false">
<key column="bookShelfId" />
<one-to-many class="com.example.Book" />
</set>
</class>
<class name="com.example.Book" table="SHELF_BOOK">
<id name="id" type="long" column="shelfBookId">
<generator class="native" />
</id>
<property name="name" not-null="true" unique="true"/>
</class>
有没有办法让关系所有者 BookShelf 指定一些可用于区分小说和非小说书籍的 discriminator 值?如果可能,鉴别器将作为附加列存储在 SHELF_BOOK 表中,Hibernate 会自动对其进行过滤。
有没有一种方法可以做到这一点,而无需借助 多对多 关联或使用 每类表策略扩展 Book 实体?
【问题讨论】: