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

 

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支持多态查询。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值