优点:和上面的“每个子类一张表”策略相似。因为超类通常是抽象的,所以具体的三张表是必须的[开头处说的3张或更多的表是必须的],任何子类的数据修改只涉及一张表,运行起来更快。
缺点:SQL(from子句和union all子查询)太复杂。但是大多数数据库对此类SQL的调优都很好。
如果一个类想和Payment超类关联,数据库无法使用引用完整性(referential integrity)来实现它;必须使用触发器来实现它。这对数据库性能有些影响。
4 隐式多态(Table per concrete class, using implicit polymorphism) 略
5 混合使用“每个类分层结构一张表”和“每个子类一张表”
<class name="Payment" table="PAYMENT"><id name="id" type="long" column="PAYMENT_ID"><generator class="native"></generator></id><discriminator column="PAYMENT_TYPE" type="string"></discriminator><property name="amount" column="AMOUNT"></property>
...
<subclass name="CreditCardPayment" discriminator-value="CREDIT"><join table="CREDIT_PAYMENT"><property name="creditCardType" column="CCTYPE"></property>
...
</join></subclass><subclass name="CashPayment" discriminator-value="CASH">
...
</subclass><subclass name="ChequePayment" discriminator-value="CHEQUE">
...
</subclass></class>
对上述任何一种映射策略而言,指向根类Payment的 关联是使用<many-to-one>进行映射的。
<many-to-one name="payment" column="PAYMENT_ID" class="Payment"></many-to-one></many-to-one>
关于继承映射(下)
最新推荐文章于 2025-08-06 09:55:31 发布