一.一对一
1.口诀:
首先明了外或主
若是外则唯一多
多中属性油腻克(unique)
若是主则约束主
一中属性坑死德(constrained)
油先生和坑先生
两者皆对大欢喜(true)
2.一对一(基于外键的一对一)
1.1无外键方:
<one-to-one name=" " class=" " property-ref=" "></one-to-one>
1.2有外键方:就是多对一加上唯一性约束
<many-to-one name=" " class=" " column=" " unique="true"/>
1.3解释:
name:对应实体类中的属性名,如id,name,description
class:所映射对方类的完整全名
property-ref:对方映射中表达此一对一的属性
column:有外间方的外键在数据库表中的名字
unique:唯一性约束
3.一对一(基于主键的一对一)
2.1无外键方:
<one-to-one name=" " class=" " property-ref=" "></one-to-one>
与基于外键方一样。
2.2有外键方:采用一对一的映射
<id name="id" >
<generator class="foreign">
<param name="property">XXXX</param>
</generator>
</id>
<one-to-one name="XXXX" class=" " constrained="true"></one-to-one>
2.3解释:
constrained:默认为false,表示不在主键列上加上外键约束,true表示要加上外键约束
XXXX:类中所要映射的属性
二.一对多
1.口诀:
共同映射用最多
一对多来上集合
多对一来上属性
一对多欲弃江山
反转一改抱美人
2.一对多方(共同映射)
<set name=" " inverse=" ">
<key column=" "></key>
<one-to-many class=" "/>
</set>
3.多对一方(共同映射)
<many-to-one name=" " class=" " column=" "/>
4.解释:
name:类中所要映射的属性
inverse:反转,代表本方是否放弃对关系的维护,默认为fasle,true是确定放弃
key-column:为多的一方的外键列设置名字,一般是已方类的小写,与many中的column名字要一致
one-to-many-class:一的一方的全名
many-to-one-class:多的一方的全名
5.单方映射
5.1单向多对一:单向的多对一是由需求产生的。是人为的设定的。
只在多的一方进行配置:
<many-to-one name=" " column=" "cascade=" "/>
cascade:级联,被关联的对象和本对象具有相同的操作,默认值为none,表示没有级联。
有以下几个值和状态:
save-update:对本对象做save()、update()、或saveOrUpdate()时,对这个关联对象也做saveOrUpdate()操作
delete:对本对象做delete()时,对这个关联对象也做delete()操作。
delete-orphan:当关联的对象移除与本对象的关系时,就成了孤儿,就会被删除(注意,只会删除本Session中
新产生的孤儿对象)。
all:所有的级联,但不包括删除孤儿。
all-delete-orphan:所有的级联,包括删除孤儿。
5.2单向一对多:单向的一对多是由需求产生的。是人为的设定的。
他的映射原理和单向一对多是一样的,都是在多的一端加入一个外键,指向一的一端。
只在一的一方配置:
<one-to-many class=" "/>
三.多对多
1.口诀:
九阴九阳威力同
互相结合大圆满
若想进行自阉割
反转必是绝情刀
2.多对多(对称)
两边都是同样的配置模板,只是填空不一样
<set name=" " table=" " inverse=" ">
<key column=" "></key>
<many-to-many class=" " column=" " ></many-to-many>
</set>
3.解释:
name:本类中存放对方的集合属性
table:双方共用的中间表,表名必须一致
inverse:只能有一方使用,任何一方都可以,看具体需求
class:映射的对方类的全名
column:映射的对方类中的外键名,一般是已类名称的小写