java - 将表映射到 Hibernate 中的两个继承表

标签 java database hibernate database-design

我正在尝试映射一组之间具有复杂关系的表。我有以下带有字段的表:

Table: Parent
       id
       type

Table: Child1
       parentId : foreign
       list of fields

Table: Child2
       parentId : foreign
       list of fields

在数据库中,基本思想是父表类型字段确定相关记录是否出现在 Child1 或 Child2 中。通过这种方式,我根据记录的类型存储有关记录的信息,例如他们都是客户,但有些是个人,有些是企业,因此我可以根据此存储单独的信息。

我的问题是如何在 Hibernate 中对此进行建模?我知道使用 @SecondaryTable 来合并两个表,但是如何根据父表中的值来执行此操作?

最佳答案

您正在寻找的是为该类使用鉴别器列。请参阅Hibernate docs re inheritance mapping

示例是

<class name="Payment" table="PAYMENT">
    <id name="id" type="long" column="PAYMENT_ID">
        <generator class="native"/>
    </id>
    <discriminator column="PAYMENT_TYPE" type="string"/>
    <property name="amount" column="AMOUNT"/>
    ...
    <subclass name="CreditCardPayment" discriminator-value="CREDIT">
        <join table="CREDIT_PAYMENT">
            <property name="creditCardType" column="CCTYPE"/>
            ...
        </join>
    </subclass>
    <subclass name="CashPayment" discriminator-value="CASH">
        ...
    </subclass>
    <subclass name="ChequePayment" discriminator-value="CHEQUE">
        ...
    </subclass>
</class>

关于java - 将表映射到 Hibernate 中的两个继承表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6898787/

相关文章:

java - hibernate 3.6.7 orphanRemoval 级联单向

java - 用 Java 编写 GUI 的常规方法是什么?

java - 正则表达式从给定字符串中删除特殊字符

php - 部分匹配 MySQL 查询

C数据库设计,可按多字段排序

spring - 在具有共享服务的单个应用程序中使用 Apache cxf 和 spring mvc

java - 尝试从 "main-menu"类调用方法,但它被卡住了,但是当从方法类调用时,它工作得很好

java将HashMap元素放入foreach循环中仅使用最后一个

mysql - 在数据库 SQL 中选择获奖女性

java - hibernate中的OneToMany关系创建4个表