5.1.16. 连接的子类(joined-subclass)

此外,每个子类可能被映射到他自己的表中(每个子类一个表的策略)。被继承的状态通过和超类的表关联得到。我们使用<joined-subclass>元素。

  1. <joined-subclass
  2. name="ClassName"
  3. table="tablename"
  4. proxy="ProxyInterface"
  5. lazy="true|false"
  6. dynamic-update="true|false"
  7. dynamic-insert="true|false"
  8. schema="schema"
  9. catalog="catalog"
  10. extends="SuperclassName"
  11. persister="ClassName"
  12. subselect="SQL expression"
  13. entity-name="EntityName"
  14. node="element-name">
  15. <key .... >
  16. <property .... />
  17. .....
  18. </joined-subclass>
1name: 子类的全限定名。
2table: 子类的表名.
3proxy (可选): 指定一个类或者接口,在延迟装载时作为代理使用。
4lazy (可选, 默认是 true): 设置为 lazy="false" 禁止使用延迟装载。

这种映射策略不需要指定辨别标志(discriminator)字段。但是,每一个子类都必须使用&lt;key&gt;元素指定一个表字段来持有对象的标识符。本章开始的映射可以被用如下方式重写:

  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD//EN"
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping package="eg">
  6. <class name="Cat" table="CATS">
  7. <id name="id" column="uid" type="long">
  8. <generator class="hilo"/>
  9. </id>
  10. <property name="birthdate" type="date"/>
  11. <property name="color" not-null="true"/>
  12. <property name="sex" not-null="true"/>
  13. <property name="weight"/>
  14. <many-to-one name="mate"/>
  15. <set name="kittens">
  16. <key column="MOTHER"/>
  17. <one-to-many class="Cat"/>
  18. </set>
  19. <joined-subclass name="DomesticCat" table="DOMESTIC_CATS">
  20. <key column="CAT"/>
  21. <property name="name" type="string"/>
  22. </joined-subclass>
  23. </class>
  24. <class name="eg.Dog">
  25. <!-- mapping for Dog could go here -->
  26. </class>
  27. </hibernate-mapping>

更多关于继承映射的信息,参考第 9 章 继承映射(Inheritance Mappings)