hibernate阅读笔记(4)

本文介绍了Hibernate中三种不同的继承映射策略:单表继承、每类一表和具体类映射,并详细解释了每种策略的配置方法及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[size=medium][align=center]映射[/align][/size]
一、 继承映射
1、 一个类继承映射成一张表
有三个类Animal Pig Bird,其中Pig和Bird都继承自Animal
<class name="Animal" table="t_animal">
<id name="id">
<generator class="native"/>
</id>
<discriminator column="animal_type" type="string" />
<property name="name" />
<subclass name="Pig" discriminator-value="P">
<property name="weight"/>
</subclass>
<subclass name="Bird" discriminator-value="B"/>
<property name="height"
</subclass>
</class>
简单说明:为了区分到底是Pig 还是Bird 需要加一个鉴别标签<discriminator /> 然后在子类上加一个鉴别值discriminator-value 再将数据在插入数据库时,就会自动将这个鉴别值加入。
在加载的过程中有可能用到多态性
多态查询:在hibernate加载数据的时候能鉴别出正真的类型(instanceOf)
因为load是支持延迟加载的,它在加载的过程中产生一个代理类,因此默认情况下不支持多态查询,为了让它支持多态只有把lazy设置为false
2、 每个类映射成一张表
<class name="Animal" table="t_animal">
<id name="id">
<generator class="native"/>
</id>
<property name="name" />
<joined-subclass name="Pig" table="t_pig">
<key column="pigid" />
<property name="weight"/>
</joined-subclass>
<joined-subclass name="Bird" table="t_bird">
<key column="birdid"/>
<property name="height" />
</joined-subclass>
</class>
这里应用了<joined-subclass />标签。
这样是产生了三张表。
3、 具体类映射成一张表
<class name="Animal" abstract="true">

<id name="id">
<generator class=""/>
</id>
<property name="name" />
<union-subclass name="Pig" table="t_pig">
<property name="weight"/>
</union-subclass>
<union-subclass name="Bird" table="t_bird">
<property name="height" />
</union-subclass>
</class>
Animal 是一个抽象类他不生成表,此时的主键生成策略不能用native。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值