Hibernate 关系映射之多对一,一对多关联

Hibernate 关系映射之多对一,一对多关联

一、多对一单向

使用场景:以用户(user)和组(group)关系为例 。

    一个组有多个用户;每一个用户对应一个特定的组。

 

  • 对象模型

Hibernate 关系映射之多对一,一对多关联_第1张图片
 

实体类 User

public class User {
  private int id;
  private String name;
  private Group group;
  public Group getGroup() {return group;  }
  public void setGroup(Group group) {this.group = group;}
  public int getId() {return id;  }
  public void setId(int id) { this.id = id;}
  public String getName() {return name;}
  public void setName(Stringname) {  this.name = name;}} 

 实体类Group

public class Group {
  private int id;
  private String name;
  public int getId() {return id;}
  public void setId(int id) { this.id = id;}
  public String getName() {return name;}
  public void setName(Stringname) {this.name = name;}
}

 

 

  • 关系模型  

Hibernate 关系映射之多对一,一对多关联_第2张图片
 

  • 实体映射关联

1.xml方式

标签设定关联,在多的一方设置对应的外键

 

 



  
      
          
      
      
  



  
      
          
      
        
      
  

 

 

 annotation方式

在“多”的类中的“一”对象getter方法上添加注解@ManyToOne注解,并用@JoinColumn设定外键名,如下

 

 

@ManyToOne
@JoinColumn(name="gid")
  public Group getGroup() {
      return group;
 }

 

 

二、一对多单向

使用场景:以Class(班级)和Student(学生)的关系为例。

每一个学生属于一个班,每一个班有多个学生。

 

  • 对象模型 

Hibernate 关系映射之多对一,一对多关联_第3张图片

 

实体类Class:

 

public class Class{
  private int id;
  private String name; 
  private Setstudents = new HashSet();
  public int getId() {return id;  }
  public void setId(int id) {this.id = id;}
  public String getName() {return name;}
  public void setName(Stringname) {this.name = name;}
}

  实体类Student:

 

 

public class Student {
  private int id;
  private String name;
  public int getId() {return id;}
  public void setId(int id) { this.id = id;}
  public String getName() {return name;}
  public void setName(Stringname) {  this.name = name;}
}

 

 

 

  • 关系模型

Hibernate 关系映射之多对一,一对多关联_第4张图片

 

  •  多对一、一对多的区别:

多对一关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是多指向一的。

一对多关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是一指向多的。

 

两者使用的策略是一样的,只是各自所站的角度不同。

 

  • 实体映射关联

1.xml方式

在“一”的一方添加标签 映射一对多(映射set集合),name=集合对象,然后在用标签定义外键。标签设置映射的类实体

 



    
        
            
        
        
    
 


    
        
            
        
               
        
            
            
        
    

 

2.annotation方式 

在“一”的类中的“多”对象getter方法上添加注解@OneToMany 注解,并用@JoinColumn设定外键名,如下

 @OneToMany 
 @JoinColumn(name="cid") 
   public SetgetStudents() {
     return students;
 }

 

三、多对一双向(一对多双向)

在此不再累赘了,"一"和"多"关系可以双向维持,使用不是很多。关联设定的方法是上面两者的综合。

 

 

你可能感兴趣的:(网页框架,Hibernate,O/RMaping,关联映射,多对一,一对多)