首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate hbm子类

Hibernate hbm子类
EN

Stack Overflow用户
提问于 2013-07-30 11:02:04
回答 1查看 1.5K关注 0票数 0

我有这个hbm:

代码语言:javascript
复制
<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>,我想得到两个具体的表,一个用于“支付”和一个用于"CreditCardPayment“,是HBM满足我的需要吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-30 11:18:27

如果要使用<subclass>方法,鉴别器。这是因为hibernate允许将子类策略与该标记混合。,所以您可以在一个表中拥有不同类型的实体,其中一些实体是执行连接操作所必需的,还有一些实体的值都存储在该主表中。这里您有需要连接的CreditCardPayment和其他更简单的支付类型:

代码语言:javascript
复制
<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实现,它强制每个具体类实现使用单个表,但也可以管理Payment类的父实体。

代码语言:javascript
复制
<class name="Payment" table="PAYMENT">
    <id name="id" type="long" column="PAYMENT_ID">
        <generator class="native"/>
    </id>
    <property name="amount" column="AMOUNT"/>
    ...
    <joined-subclass name="CreditCardPayment" table="CREDIT_PAYMENT">
        <key column="PAYMENT_ID"/>
        <property name="creditCardType" column="CCTYPE"/>
        ...
    </joined-subclass>
    <joined-subclass name="CashPayment" table="CASH_PAYMENT">
        <key column="PAYMENT_ID"/>
        ...
    </joined-subclass>
    <joined-subclass name="ChequePayment" table="CHEQUE_PAYMENT">
        <key column="PAYMENT_ID"/>
        ...
    </joined-subclass>
</class>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17945269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档