5.1.17. 联合子类(union-subclass)

第三种选择是仅仅映射类继承树中具体类部分到表中(每个具体类一张表的策略)。其中,每张表定义了类的所有持久化状态,包括继承的状态。在 Hibernate 中,并不需要完全显式地映射这样的继承树。你可以简单地使用单独的<class>定义映射每个类。然而,如果你想使用多态关联(例如,一个对类继承树中超类的关联),你需要使用<union-subclass>映射。

  1. <union-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. abstract="true|false"
  12. persister="ClassName"
  13. subselect="SQL expression"
  14. entity-name="EntityName"
  15. node="element-name">
  16. <property .... />
  17. .....
  18. </union-subclass>
1name: 子类的全限定名。
2table: 子类的表名
3proxy (可选): 指定一个类或者接口,在延迟装载时作为代理使用。
4lazy (可选, 默认是 true): 设置为 lazy="false" 禁止使用延迟装载。

这种映射策略不需要指定辨别标志(discriminator)字段。

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