我有这个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满足了我的需求吗?
答案 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