关于继承映射(下)

优点:和上面的“每个子类一张表”策略相似。因为超类通常是抽象的,所以具体的三张表是必须的[开头处说的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>

你可能感兴趣的:(数据结构,sql)