9.1. 三种策略

Hibernate支持三种基本的继承映射策略:

  • 每个类分层结构一张表(table per class hierarchy)

  • 每个子类一张表(table per subclass)

  • 每个具体类一张表(table per concrete class)

此外,Hibernate还支持第四种稍有不同的多态映射策略:

  • 隐式多态(implicit polymorphism)

对于同一个继承层次内的不同分支,可以采用不同的映射策略,然后用隐式多 态来完成跨越整个层次的多态。但是在同一个<class>根元素 下,Hibernate不支持混合了元素<subclass><joined-subclass><union-subclass> 的映射。在同一个<class>元素下,可以混合使用 “每个类分层结构一张表”(table per hierarchy) 和“每个子类一张表”(table per subclass) 这两种映射策略,这是通过结合元素<subclass><join>来实现的(见后)。

在多个映射文件中,可以直接在hibernate-mapping根下定义subclassunion-subclassjoined-subclass。也就是说,你可以仅加入一个新的映射文件来扩展类层次。你必须在subclass的映射中指明extends属性,给出一个之前定义的超类的名字。注意,在以前,这一功能对映射文件的顺序有严格的要求,从Hibernate 3开始,使用extends关键字的时侯,对映射文件的顺序不再有要求;但在每个映射文件里,超类必须在子类之前定义。

  1. <hibernate-mapping>
  2. <subclass name="DomesticCat" extends="Cat" discriminator-value="D">
  3. <property name="name" type="string"/>
  4. </subclass>
  5. </hibernate-mapping>