subclass 只对一张表,查询起来效率高,但是一个缺点就是这个表中可能有很多空字段~表机构不是很合理。需要鉴别器。
部分主要的配置文件
<class neme="Employee" table="employee" discriminator-value="0">
..................................................
<descriminator column="type" type="int"/>
<subclass name="Skiller" discriminator-value="1">
<property name="skill"/>
</subclass>
<subclass name="Sales" discriminator-value="2">
<property name="sale"/>
</subclass>
........................................................
</class>
joined-subclass针对多张表,查询效率可能低。但它维护了表结构的合理性。
部分主要配置文件
<class neme="Employee" table="employee" >
..................................................
<joined-subclass name="Skiller" table="skiller">
<key column="emp_id"/>
<property name="skill"/>
<joined-subclass>
<joined-subclass name="Sales" table="sales">
<key column="emp_id"/>
<property name="sale"/>
<joined-subclass>
........................................................
</class>
另外可以把这两种映射方式结合起来,使类中属性少的那个类使用subclass,属性多的那个类使用subclass(其中用join字段)。也就是属性少的不用单建立表,属性多的要单建立一个表。
<class neme="Employee" table="employee" discriminator-value="0">
..................................................
<descriminator column="type" type="int"/>
<subclass name="Skiller" discriminator-value="1">
<property name="skill"/>
</subclass>
<subclass name="Sales" discriminator-value="1">
<joine table="sales">
<key column="emp_id"/>
<property name="sale"/>
</join>
<subclass>
........................................................
</class>
还有一种就是每个子类一张表,每个表里的信息都是完整的,所以就不用关联表~
部分主要配置文件.用这种方式必须保证主键ID不同。
<class neme="Employee" table="employee" >
..................................................
<union-subclass name="Skiller" table="skiller">
<property name="skill"/>
</union-subclass>
<union-class name="Sales" table="sales" >
<property name="sale"/
<union-subclass>
........................................................
</class>