mysql - 与同一实体类型和表的多个一对多关系?

标签 mysql hibernate jpa

我有一个有趣的用例,我希望 Hibernate 管理与同一实体类型的多个一对多关系。

例如:BookShelf fictionBooksBook 的关系,还有 BookShelf nonFictionBooks 映射到 Book(s)。 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 是否可以指定一些可用于区分小说类书籍和非小说类书籍的鉴别器值?如果可能,鉴别器将作为附加列存储在 SHELF_BOOK 表中,Hibernate 将自动对其进行过滤。

有没有一种方法可以在不求助于多对多 关联或使用每类表策略Book 实体的情况下做到这一点?

最佳答案

理想情况下,SHELF_BOOK 表中应该有一个“类型”或“标志”列,表明该书是小说还是非小说。

假设您已经添加了这个“类型”列,那么我认为您可以在集合中指定一个过滤语句:

<set name="fictionBooks" table="SHELF_BOOK" cascade="all-delete-orphan"   lazy="false">
    <filter name="myfilter" condition=":type = 'FICTION'"/>
    <key column="bookShelfId" />
    <one-to-many class="com.example.Book" />
</set>

可以引用http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#objectstate-filters

关于mysql - 与同一实体类型和表的多个一对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32107262/

相关文章:

Java : Which is better - returning an Object property or whole Object

java - 从 native 查询和转换中检索数据

php - 登录后将管理员以外的用户重定向到主页

java - 如何限制用户在 jpa 列中仅输入特定值?

php - Android PHP PDO MySQL UPDATE 语法错误

windows - @Transactional 和 JerseyTest 在 Linux 或 Mac 上的问题,但在 Windows 上没有

java - 无法 JDBC 连接到 jdbc :mysql//localhost:3306/database

java - JPA Hibernate 意外获取 @OneToOne 映射实体的记录,我应该将映射更改为 @ManyToOne 还是执行其他操作?

c++ - 奇怪 - mysql 的 sql::SQLException 未被其类型捕获,而是被捕获为 std::exception 并成功投回

mysql - 从 ms Access mysql 导出包含图片 (BLOB) 的表