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;

Deliver实体类配置文件:
<many-to-one name="ExpSite" class="ExpSite实体所在的包名+ExpSite实体的名" column="ExpSiteId(外键字段)"></many-to-one>

(2)在一这方配置集合属性 

ExpSite表为一方,ExpSite实体类中放一个Deliver方的Set集合做属性,假设是 Set<Deliver> deliverList= new HashSet<Deliver>();
<set name="deliverList">
    <key column="ExpSiteId(外键字段)"></key>
    <one-to-many class="Deliver实体所在的包名+Deliver实体的名"></one-to-many>
</set>

三、多对多映射 

如用户(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>

原文地址:https://www.cnblogs.com/cloudml/p/4211828.html