Hibernate关联关系配置

第一种关联关系:一对多(多对一)

"一对多"是最普遍的映射关系,简单来讲就如消费者与订单的关系。

一对多:从消费者角的度来说一个消费者可以有多个订单,即为一对多。

多对一:从订单的角度来说多个订单可以对应一个消费者,即为多对一。

一对多关系在hbm文件中的配置信息:

消费者(一方):

 
 
 
 
  1.  
  2.  
  3.       
  4.           
  5.               
  6.               
  7.                   
  8.                   
  9.               
  10.               
  11.               
  12.               
  13.               
  14.               
  15.                   
  16.                   
  17.               
  18.           
  19.      

订单(多方):

 
 
 
 
  1.  
  2.  
  3.      
  4.          
  5.              
  6.                  
  7.                  
  8.              
  9.               
  10.              
  11.              
  12.               
  13.             
  14.                          column="customer_id" cascade="save-update"> 
  15.                       
  16.          
  17.      

"一对多"关联关系,Customer方对应多个Order方,所以Customer包含一个集合用于存储多个Order,Order包含一个Customer用于储存关联自己的Customer。

一对多关联关系有一种特例:自身一对多关联。例如:

自身一对多关联自身的hbm文件设置:

 
 
 
 
  1.  
  2.  
  3.       
  4.      
  5.          
  6.              
  7.                  
  8.                  
  9.              
  10.               
  11.              
  12.               
  13.              
  14.                  
  15.                  
  16.              
  17.               
  18.              
  19.              
  20.               
  21.          
  22.      

外键存放父亲的主键。

第二种关联关系:多对多

多对多关系也很常见,例如学生与选修课之间的关系,一个学生可以选择多门选修课,而每个选修课又可以被多名学生选择。数据库中的多对多关联关系一般需采用中间表的方式处理,将多对多转化为两个一对多。

数据表间多对多关系如下图:

多对多关系在hbm文件中的配置信息:

学生:

 
 
 
 
  1.  
  2.  
  3.  
  4.      
  5.          
  6.              
  7.              
  8.          
  9.  
  10.          
  11.  
  12.          
  13.              
  14.             
  15.                 column="course_id"> 
  16.          
  17.      
  18.  

课程:

 
 
 
 
  1.  
  2.  
  3.  
  4.      
  5.          
  6.              
  7.              
  8.          
  9.  
  10.          
  11.  
  12.          
  13.              
  14.             
  15.                 column="student_id"> 
  16.          
  17.      
  18.  

其实多对多就是两个一对多,它的配置没什么新奇的相对于一对多。在多对多的关系设计中,一般都会使用一个中间表将他们拆分成两个一对多。标签中的"table"属性就是用于指定中间表的。中间表一般包含两个表的主键值,该表用于存储两表之间的关系。由于被拆成了两个一对多,中间表是多方,它是使用外键关联的,是用于指定外键的,用于从中间表取出相应的数据。中间表每一行数据只包含了两个关系表的主键,要获取与自己关联的对象集合,还需要取出由外键所获得的记录中的另一个主键值,由它到对应的表中取出数据,填充到集合中。中的"column"属性是用于指定按那一列的值获取对应的数据。

例如用course表来说,它与student表使用一个中间表student_course关联。如果要获取course记录对应的学生记录,首先需要使用外键"course_id"从student_course表中取得相应的数据,然后在取得的数据中使用"student_id"列的值,在student表中检索出相关的student数据。其实,为了便于理解,你可以在使用course表的使用就把中间表看成是student表,反之亦然。这样就可以使用一对多的思维来理解了,多方关联一方需要外键那么在本例子中就需要"course_id"来关。

第三种关联关系:一对一

一对一关系就球队与球队所在地之间的关系,一支球队仅有一个地址,而一个地区也仅有一支球队(貌似有点勉强,将就下吧)。数据表间一对一关系的表现有两种,一种是外键关联,一种是主键关联。图示如下:

一对一外键关联:

一对一主键关联:要求两个表的主键必须完全一致,通过两个表的主键建立关联关系:

一对一外键关联在hbm文件中的配置信息:

地址:

 
 
 
 
  1.  
  2.  
  3.  
  4.      
  5.          
  6.              
  7.              
  8.          
  9.  
  10.          
  11.           
  12.          
  13.  
  14.      
  15.  

球队:

 
 
 
 
  1.  
  2.  
  3.  
  4.      
  5.          
  6.              
  7.              
  8.          
  9.  
  10.          
  11.           
  12.          
  13.  
  14.      
  15.  

一对一外键关联,其实可以看做是一对多的一种特殊形式,多方退化成一。多方退化成一只需要在标签中设置"unique"="true"。

一对一主键关联在hbm文件中的配置信息:

地址:

 
 
 
 
  1.  
  2.      
  3.          
  4.              
  5.              
  6.          
  7.  
  8.          
  9.           
  10.          
  11.  
  12.      
  13.  

球队:

 
 
 
 
  1.  
  2.      
  3.          
  4.              
  5.              
  6.                 adress 
  7.              
  8.          
  9.  
  10.          
  11.           
  12.          
  13.  
  14.      
  15.  

一对一主键关联,是让两张的主键值一样。要使两表的主键相同,只能一张表生成主键,另一张表参考主键。

 
 
 
 
  1.  
  2.   adress 
  3.  

"class"="foreign"就是设置team表的主键参照adress属性的主键值。

文章标题:Hibernate关联关系配置
网址分享:http://www.mswzjz.cn/qtweb/news12/470112.html

攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能