Hibernate关联映射小结

1.多对一关联映射(many-to-one)


在多的一端加入<many-to-one>标签

会在多的一端加入一个外键指向多的一端,外键由<many-to-one>的column属性指定

级联:表的连锁操作

cascade:all  none  save-update  delete

 

2.一对一关联映射(one-to-one)

 

一对一关联映射有两种策略:

1.主键关联:让两个对象具有相同的主键,(即是主键又是外键)

2.唯一外键:在多对一关联映射的基础上,外键加上唯一约束

 

一对一主键关联映射(单向关联)

<id name="id">

<generator class="foreign">

<param name="property">关联对象属性</param>

</generator>

</id>

<one-to-one name="关联对象属性" constrained="true">

Hibernate加载关联对象,默认是根据主键加载,constrained="true",表示当前主键上有一个约束,当前主键同时作为外键参照了关联对象

一对一关联映射,默认cascade属性

 

一对一主键关联映射(双向关联)

在另外一端加入相应关联对象的属性,并在其映射文件中加入<one-to-one>标签,设置如何加载关联对象,默认根据主键加载。

 

一对一唯一外键关联映射(单向关联)

<mony-to-one>标签中的unique属性设为true,即在外键上增加了唯一约束,没有默认cascade属性。

 

一对一唯一外键关联映射(双向关联)

在另外一端加入相应关联对象的属性,并在其映射文件中加入<one-to-one>标签,设置如何加载关联对象,默认根据主键加载。但两个对象采用的是外键关联,所以需要设置property--ref属性,<one-to-one property="关联对象属性">

 

3.一对多关联映射<one-to-many>

在对象模型中,一对多关系采用集合来表示

多对一关联映射和一对多关联映射,都是在多的一端加入一个外键指向一的一端,只是站的角度不同。

 

单向关联:

<set name="关联对象属性">

<key column="列名">

<one-to-many class="关联对象的完整类名">

</set>

在一的一端维护关系的缺点:

在外键上添加非空约束,则无法保存,需要upadte

 

双向关联:

在多的一端采用<many-to-one>(<key>标签的column属性值必须与<many-to-one>中的column属性值保持一致)

由于在一的一端维护关系有缺点,所以我们在多的一端维护

在<set>标签中设置inverse="true",使得我们只能从多的一端进行维护,在一的一端维护时他会反转给多的一端维护,不会在发出多余的update语句。

 

4.多对多关联映射<many-to-many>

关系模型中多对多关系会生成中间表

 

单向关联:

<set name="关联对象属性" table="表名">

<key column="列名">

<many-to-many class="关联对象的完整类名" column="列名">

</set>

 

双向关联:

在另一端同样加入,<set>中table的值与另一端<set>中table的值一致,<key>中column的值与与另一端中<many-to-many>中column的值一致

<set name="关联对象属性" table="表名">

<key column="列名">

<many-to-many class="关联对象的完整类名" column="列名">

</set>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值