添加外键:
<!--
添加外键 :
name : 对应类中的外键属性名
class : 对应引用外键的类
column: 外键中数据库中的ID字段名称
-->
<many-to-one name="teacher" class="Teacher" column="teacher_id">
</many-to-one>
一对一:
<!--
一对一:
name : 对应当前类中被关联类的属性
private Department dept;
class: 被关联的类的完全限定名
-->
<one-to-one name="dept" class="Department">
</one-to-one>
基于外键关联的一对一:
A表(有外键字段)
<!--
使用 many-to-one 映射1-1关系
unique="true" 添加外键唯一约束
-->
<many-to-one name="mgr" class="Manager" column="mgrId" unique="true" >
</many-to-one>
B表(一对一)
<!--
property-ref="mgr":指定使用被关联实体主键以外的字段作为关联字段
例:使用Department表(引用外键的表),
用Department的外键mgr与Manager的ID做关联
如果不添加property-ref,则B表与A表的主键ID进行关联,如果添加了property-ref,则B表与A表的外键字段进行关联(而A表的外键字段是根据B表的主键关联的,达到了一对一的效果)
-->
<one-to-one name="dept" class="Department" property-ref="mgr">
</one-to-one>
基于主键的一对一:
A表(主键根据B表主键生成)
<!--
当前类的主键生成策略必须为:foreign (使用外键生成当前主键)
其 one-to-one 节点还应增加constrained="true"属性,以使当前
【主键添加上外键约束】
-->
<one-to-one name="mgr" class="Manager" constrained="true">
</one-to-one>
B表
<!-- 映射1-1关联关系 -->
<one-to-one name="dept" class="Department">
</one-to-one>
双向一对多:
A表中(一对多,类中有Set集合):
<!--
table:与Order的表名对应
key的column:与Order的外键字段名对应
inverse:true,Customer放弃维护Order的外键引用
可以减少UPDATE语句
-->
<!--
cascade="delete" 级联删除
-->
<!--
cascade="delete-orphon" 解除外键关系,删除孤儿(Order有关的外键记录)
-->
<!--
cascade="save-update" 级联保存
当执行session.save(customer)的同时,也会将与customer有外键关系的
order同时保存
-->
<!--
order-by="":在查询时对集合中的元素排序,order-by中
使用的是表的字段名,而不是持久化类的属性名
例:order-by="ORDER_NAME DESC" (desc降序排)
-->
<set name="orders" table="orders" inverse="true">
<key column="customer_id"></key>
<one-to-many class="Order"/>
</set>
B表中(有对A表引用的外键):
<!-- 映射多对一的关联关系 -->
<many-to-one name="customer" class="Customer" column="customer_id">
</many-to-one>
双向多对多:
A表中:
<!--
注:双向多对多,两个持久化类的XML配置文件中,
set节点的table名要一致,同时,列名要交叉相同
并且其中一个set节点一定要放弃维护关联关系!
inverse="true"
-->
<!--
name :当前类中的Set集合属性名
table:指定中间表名称
-->
<set name="items" table="category_item">
<key>
<!-- 设置当前类中的Set集合在数据库的字段名 -->
<column name="c_id"></column>
</key>
<!--
使用 many-to-many 指定多对多的关联关系,
column:执行Set集合中持久化类在中间表的外键列的名称
-->
<!--
class : 被关联的另一个类的完全限定名
column: 另一个类在中间表中的字段名
-->
<many-to-many class="Item" column="i_id"></many-to-many>
</set>
B表中:
<set name="categories" table="category_item" inverse="true">
<key>
<column name="i_id"></column>
</key>
<many-to-many class="Category" column="c_id"></many-to-many>
</set>