继承-----单表继承---每棵类继承树使用一个表

来源:互联网 发布:喜马拉雅听书 mac 编辑:程序博客网 时间:2024/06/06 17:05
 

1.单表继承:即每棵类继承树使用一个表。

(1)类继承树对应多个类,多个类的信息存储于一张表中,那么如何区分某条记录属于哪个类?

        采用的机制是在表中添加一个字段,用字段的值来进行区分。

(2)配置文件如下:

<hibernate-mapping package="包名"><class name="父类名称" table="对应的表名"><id name="id"><generator class="native"></generator></id><discriminator column="新增加的字段名称" type="对应的类型"></discriminator><property name="父类属性"></property>...........<subclass name="子类名称" discriminator-value="该子类对应的鉴别值"><property name="子类的属性"></property></subclass><subclass name="子类名称" discriminator-value="该子类对应的鉴别值"><property name="子类的属性"></property></subclass></class><!-- 这种方法繁琐,所以采用上面的配置<subclass name="子类名称" extends="父类名称"></subclass> --></hibernate-mapping>


说明如下:

A:父类采用<class>标签定义

B:在父类中定义一个discriminator,即指定用于区分字段的名称和类型

<discriminator column="区分字段名称" type="类型"></discriminator>

C:子类使用<subclass>标签,name属性指明子类的路径,discriminator-value属性指定用于区分该类字段的值。

         子类的属性也是用<property>加以标识。

D:<subclass>与<class>可以平行,但需要指定继承的名称,较繁琐,所以使用<class>包含<subclass>的形式。

 

另外:

多态查询:即在hibernate加载数据的时候能够鉴别出真正的类型。

(1)get方式支持多态查询,因为get不支持lazy策略,所以不生成代理类。

(2)load默认情况下是支持lazy的,所以不支持多态查询,当lazy设置为false时,才支持多态查询。

(3)HQL支持多态查询。

原创粉丝点击