hibernate阅读笔记(2) 关联映射

关联映射


1、 一对一主键关联映射
以人和身份证为例:每个公民对应一个身份证,因此公民的Id号不能自动生成要参照身份证的Id
<class name="Person">
<id name="id" >
<!— -主键生成策略要参照身份证— ->
<generator class="foreign">
<param name="property">idCard</param>
</generator>
</id>
<property name="name"/>
<!- - 增加约束 constrained设置为true - ->
<one-to-one name="idCard" constrained="true"></one-to-one>

</class>
如果是单向关联,身份证的映射没有任何特别之处
如果是双向关联,只需在身份证的映射文件中加入(不改变表结构)
<one-to-one name="person" />

2、 一对一外键关联映射
可以将一对一外键关联看成是多对一外键关联的一个特例只需将unique设置为true
<many-to-one name="idCard" column="cardid" unique="true" cascade="all"/>
如果是双向关联,只需在身份证的映射文件中加入(不改变表结构)
<one-to-one name="person" property-ref="idCard"/>
property-ref: 指定关联类的属性名,这个属性将会和本类的主键相对应。如果没有指定,会使用对方关联类的主键。
3、 多对一 和一对多关联映射(单双向)
一、单向关联:
无论是多对一还是一对多都是在多的一端的表中加入一个字段,也就是说他们的表结构没有任何的不同,不同的是存取策略。
多对一映射文件:
<many-to-one name="class" column="classid" />
一对多映射文件:
<set name="students">
<key column="classid"/>
<one-to-many class="Student"/>
</set>
二、双向关联
其实双向关联其实只是将双方全都设置上也就是说它本身是多对一和一对多的综合体。
我们习惯从多的这一端来维护关系因此习惯上设置反转属性inverse=true如下:
<set name="students" inverse="true" cascade="all">
<key column="classesid"/>
<one-to-many class="Student"/>
</set>

4、 多对多关联映射
多对多的关联映射需要另外创建一张表来维护多对多的关系。下面只以一端为例说明:(双向其实就是两端都进行设置)(以用户和角色为例)
<set name="roles" table="user_roles">
<key column="userid"/>
<many-to-many class="Roles" column="rolesid"/>
</set>


你可能感兴趣的:(Hibernate)