Hibernate hbm子类

时间:2013-07-30 11:02:05

标签: hibernate

我有这个hbm:

<class name="Payment" table="PAYMENT">
<id name="id" type="long" column="PAYMENT_ID">
    <generator class="native"/>
</id>

<property name="amount" column="AMOUNT"/>
...
<subclass name="CreditCardPayment" >
    <join table="CREDIT_PAYMENT">
        <property name="creditCardType" column="CCTYPE"/>
        ...
    </join>
</subclass>

我不想使用标签<discriminator> 我想得到2张具体的桌子,一张用于“付款”,另一张用于“CreditCardPayment” HBM满足了我的需求吗?

1 个答案:

答案 0 :(得分:2)

如果您要使用<subclass>方法,then you'll need a discriminator。这是因为hibernate allows mixing subclass strategies with that tag,因此您可以在单个表中使用不同类型的实体,其中一些是执行连接操作所必需的,另一些是将所有值存储在该主表中。在这里,您需要CreditCardPayment需要加入,而其他类型的付款更简单:

<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>

然而,你可以指定<joined-subclass>,它等同于你正在做的事情,然后hibernate将进行连接并获得每个类的元素而没有鉴别器。请注意,无法在同一个班级中混合 <subclass><joined-subclass>元素。

在这里你有 table-per-subclass 实现,它不需要鉴别器,它强制你为每个具体的类实现使用一个表,但是你可以管理{{的父实体1}}类。

Payment