欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-19 11:09:22
...

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

一、多对一单向

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

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

 

  • 对象模型

Hibernate 关系映射之多对一,一对多关联
            
    
    博客分类: 网页框架 HibernateO/RMaping关联映射多对一一对多 
 

实体类 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 关系映射之多对一,一对多关联
            
    
    博客分类: 网页框架 HibernateO/RMaping关联映射多对一一对多 
 

  • 实体映射关联

1.xml方式

<many-to-one>标签设定关联,在多的一方设置对应的外键

 

 

<!--Group.hbm.xml-->
<hibernate-mapping>
  <class name="com.yk.hibernate.Group" table="group">
      <id name="id" column="id">
          <generator class="native"/>
      </id>
      <property name="name"/>
  </class>
</hibernate-mapping>
<!--User.hbm.xml-->
<hibernate-mapping>
  <class name="com.yk.hibernate.User" table="user">
      <id name="id" column="id">
          <generator class="native"/>
      </id>
      <property name="name"/>  
      <many-to-one name="group" column="gid"/>
  </class>
</hibernate-mapping>

 

 

 annotation方式

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

 

 

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

 

 

二、一对多单向

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

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

 

  • 对象模型 

Hibernate 关系映射之多对一,一对多关联
            
    
    博客分类: 网页框架 HibernateO/RMaping关联映射多对一一对多 

 

实体类Class:

 

public class Class{
  private int id;
  private String name; 
  private Set<Student>students = new HashSet<Student>();
  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 关系映射之多对一,一对多关联
            
    
    博客分类: 网页框架 HibernateO/RMaping关联映射多对一一对多 

 

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

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

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

 

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

 

  • 实体映射关联

1.xml方式

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

 

<!--Student.hbm.xml-->
<hibernate-mapping>
    <class name="com.yk.hibernate.Student" table="student">
        <id name="id" column="id">
            <generator class="native"/>
        </id>
        <property name="name" column="name"/>
    </class>
</hibernate-mapping> 
<!--Class.hbm.xml-->
<hibernate-mapping>
    <class name="com.yk.hibernate.Classes" table="class">
        <id name="id" column="id">
            <generator class="native"/>
        </id>
        <property name="name" column="name"/>       
        <set name="students">
            <key column="cid"/>
            <one-to-many class="com.yk.hibernate.Student"/>
        </set>
    </class>
</hibernate-mapping>

 

2.annotation方式 

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

 @OneToMany 
 @JoinColumn(name="cid") 
   public Set<Student>getStudents() {
     return students;
 }

 

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

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

 

 

  • Hibernate 关系映射之多对一,一对多关联
            
    
    博客分类: 网页框架 HibernateO/RMaping关联映射多对一一对多 
  • 大小: 8.3 KB
  • Hibernate 关系映射之多对一,一对多关联
            
    
    博客分类: 网页框架 HibernateO/RMaping关联映射多对一一对多 
  • 大小: 10.1 KB
  • Hibernate 关系映射之多对一,一对多关联
            
    
    博客分类: 网页框架 HibernateO/RMaping关联映射多对一一对多 
  • 大小: 10.4 KB
  • Hibernate 关系映射之多对一,一对多关联
            
    
    博客分类: 网页框架 HibernateO/RMaping关联映射多对一一对多 
  • 大小: 10.3 KB