Hibernate中的实体映射
如人(Person)与身份证(IdCard) 的关系,即为一对一的关系,一个人只能有一张身份证,一张身份证只能属于某一个人,它们的关系图如下图所示:
在Person实体中添加一个属性IdCard表示对IdCard实体的引用,在Person中的配置如下:
<many-to-one name="IdCard" column="IdCard_Id" unique="true"/> #表示该表持有外键
双向一对一:
需要在两边实体类中增加引用关联实体的属性:在Person端的配置:<many-to-one name="IdCard" column="IdCard_Id" unique="true"/> #表示该表持有外键
在IdCard端的配置:<one-to-one name="Person" property-ref="IdCard"/> #property-ref指定引用关联类的属性
二、一对多映射
如快递网点(ExpSite)与快递员(Deliver)的关系,即为一对多关系,一个快递网点有多个快递员,一个快递员只能属于某个快递网点,他们的关系如下图所示:
在一对多中,外键在多的一方
(1)在多的一方配置外键
Deliver表为多方,在Deliver实体类中放一个ExpSite方的引用做属性(外键),即所属网点ExpSite;
(2)在一这方配置集合属性
三、多对多映射
如用户(User) 与角色(Role)的关系,即为多对多的关系,一个用户可以有对个角色,一个角色也可被多个用户所拥有,它们的关系图如下图所示:
多对多关系通过中间表(User_Role)进行联系,外键放在中间表中,在User实体中添加一个属性Roles表示对Role的引用,类似的在Role实体中添加Users表示对User的引用,
User端的配置:
<set name="Roles" table="User_Role">
<key column="User_Id"/>
<many-to-many class="Role实体所在的包名+Role实体的名" column="Role_Id"/>
<set>
Role端的配置:
<set name="Users" table="User_Role">
<key column="Role_Id"/>
<many-to-many class="User实体所在的包名+User实体的名" column="User_Id"/>
<set>