一、一对多的关系


例:公司与员工的关系,公司为一,公司员工为多,需要在多方建立外键指向一方的主键。




一对多让两个实体类之间相互表示



(1)一个公司里面有多个员工。


private Set<yuangong> yuangongSet=new HashSet<yuangong>(); 

 

  public Set<yuangong> getYuangongSet() 

 

  { 

 

  return yuangongSet; 

 

  } 

 

  public void setYuangongSet(Set<yuangong> yuangongSet) 

 

  { 

 

  this.yuangongSet=yuangongSet; 

 

  } 

 
(2)一个员工只能属于一个公司
 

  private Gongsi gongsi; 

 

  public Gongsi getGongsi() 

 

  { 

 

  return gongsi; 

 

  } 

 

  public void setGongsi(Gongsi gongsi) 

 

  { 

 

  this.gongsi=gongsi; 

 

  }



配置一对多的映射关系,在映射文件中配置



(1)在公司映射文件中,表示所有员工


需要使用set标签表示所有员工


set标签的name属性需要写上在公司实体类里面表示员工的set集合名称,set标签里面还要包含一个key标签,key标签的column属性需要写实体类的外键属性名称。


在key标签的下面还需一个one-to-many标签,标签里面的class属性写员工实体类的全路径




(2)在员工映射文件中,表示所属公司


需要在一干涉文件中添加many-to-one标签,标签的name属性需要写上员工实体类里面表示公司的对象名称,标签的class属性需要写上公司类的全路径,标签的column属性需要写上外键属性名称



创建核心配置文件,把映射文件引入到核心配置文件中


<mapping resource="实体类配置文件路径"></mapping>




二、多对多的关系


例:商品与订单的关系,一个商品可以属于多个订单,一个订单可以有多种商品。


        用户和角色的关系,一个角色可以包括多个用户,一个用户可以是多个角色。



创建一张用户表和一张角色表,还需创建一张关系表,关系表至少有两个外键,分别指向两张表的主键。



1、与一对多类似,先是创建实体类,然后让两个实体类互相表示。


(1)以订单和商品为例


一个订单可以有多种商品,使用set集合表示

//一个订单可以有多种商品 
 
     private Set<ShangpinEntity> shangpinEntitySet=new HashSet<ShangpinEntity>(); 
  

      public Set<ShangpinEntity> getShangpinEntitySet() { 
 
         return shangpinEntitySet; 
 
     } 
 
     public void setShangpinEntitySet(Set<ShangpinEntity> shangpinEntitySet) { 
 
         this.shangpinEntitySet = shangpinEntitySet; 
 
     } 
  

  一种商品可以属于多个订单,使用set集合表示 

 

      //一种商品可以属于多个订单 
 
     private Set<DingdanEntity> dingdanEntitySet=new HashSet<DingdanEntity>(); 
  

      public Set<DingdanEntity> getDingdanEntitySet() { 
 
         return dingdanEntitySet; 
 
     } 
 
     public void setDingdanEntitySet(Set<DingdanEntity> dingdanEntitySet) { 
 
         this.dingdanEntitySet = dingdanEntitySet; 
 
     }

2、配置映射关系


(1)基本配置略


(2)配置多对多关系


都是使用set标签来表示彼此


在订单配置文件中配置如下标签


<!--name="对应实体类中set集合的名称" table="第三张表名(关系表)"--> 
 
         <set name="shangpinEntitySet" table="dingdan_shangpin"> 
 
             <!--column="当前映射文件在关系表中外键名称(也就是表当前主键)"--> 
 
             <key column="did"></key> 
 
             <!--class="商品表的实体类全路径" column="商品表在关系表中的外键名称(也就是商品表的主键)"--> 
 
             <many-to-many class="domain.ShangpinEntity" column="sid"></many-to-many> 
 
         </set>


在商品配置文件中配置如下标签


<!--name="对应实体类中set集合的名称" table="第三张表名(关系表)"--> 
 
         <set name="dingdanEntitySet" table="dingdan_shangpin"> 
 
             <!--column="当前映射文件在关系表中外键名称(也就是表当前主键)"--> 
 
             <key column="sid"></key> 
 
             <!--class="订单表的实体类全路径" column="订单表在关系表中的外键名称(也就是订单表的主键)"--> 
 
             <many-to-many class="domain.DingdanEntity" column="did"></many-to-many> 
 
         </set>


3、在核心配置文件中引入映射文件


 

<mapping resource="domain/DingdaEntity.hbm.xml"/> 
 
         <mapping resource="domain/ShangpinEntity.hbm.xml"/>