首页 > 程序开发 > 软件开发 > 其他 >

【Hibernate】--关联关系映射:一对多和多对一

2016-09-05

【Hibernate】--关联关系映射:一对多和多对一

之前已经对一对一的关联映射作了介绍,在日常开发中,我们还经常遇到一对多和多对一的情况。其实一对多和多对一这两种情况可以看做是一种映射,只是看待的角度不同。

一对多/多对一分为两种关联关系:单向关联和双向关联

单向关联:在一/多的一端进行配置

双向关联:两端都进行配置。

下面用实例来介绍这两种关系:班级(Class)与学生(Student)的关系

1、一对多:一个班级对应多个学生(使用双向向一对多)

实体类:

Classes.java

public class Classes {
  private int id;
  private String name;
  //在classes中引用Student,使用set定义
  private Set student;
}
Student.java
public class Student {
  private int id;
  private String name;
  //加入Classes
  private Classes classes;
}
映射文件的配置如下:

Classes.hbm.xml:




  
    
      
    
    
    
    
    
    
      
      
      
    
  
Student.hbm.xml:



  
    
      
    
    
    
    
  
说明:一对多关联,在“一”的一端Clasess为“多”的一端Student添加一个外主键,使用set标签进行设置。其中key表示设置外键,one-to-many表示在“一”端引入“多”端,值是“多”的实体类完整路径。注意inverse的使用,默认为false,表示在该端(此处为“一”端)可以维护关系,一般情况下,我们在“多”端维护关系,所以设置为true,表示在对端即“多”端维护关系。

2、多对一:多个学生(Student)对映一个班级(Classes) (使用单向关联)

映射文件

Student.hbm.xml




  
    
      
    
    
    
    
  
Classes.hbm.xml:



  
    
      
    
    
   
  
说明:多对一关联,在“多”端加入“一”端的外键,使用many-to-one标签。如果要使用双向关联,则在“一”端Classes中使用one-to-many标签进行设置。注意在“多”端cascade的使用,cascade表示关联操作,配置在Classes中,表示向学生中插入、更新时,自动更新Classes中对应的信息。

多对一及一对多关联映射的区别(单向):
不管多对一还是一对多,都是在"多"的一端添加一个外键指向"一"的一端,只不过是多对一是在多的一端为其自己添外键,而一对多则是在一的一端为多的一端添加外主键。

相关文章
最新文章
热点推荐