星空网 > 软件开发 > 数据库

hibernate(九)多对多关联

一、多对多单向关联

假设一个老师教多个学生,一个学生被多个老师教,这就是典型的多对多关系

配置方式是在Teacher类的getStudents()方法上添加注解@ManyToMany

@JoinTable(name="t_s" ,

joinColumns = { @JoinColumn(name="teacher_id")},

inverseJoinColumns = { @JoinColumn(name="student_id")}

)

Teacher类:

package cn.orlion.hibernate.model;import java.util.HashSet;import java.util.Set;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.JoinTable;import javax.persistence.ManyToMany;@Entitypublic class Teacher {  private int id;    private String name;    private Set<Student> students = new HashSet<Student>();  @Id  @GeneratedValue  public int getId() {    return id;  }  public void setId(int id) {    this.id = id;  }  public String getName() {    return name;  }  public void setName(String name) {    this.name = name;  }  @ManyToMany  @JoinTable(name="t_s" , // t_s是生成的中间表的表名    joinColumns = { @JoinColumn(name="teacher_id")},// teacher_id是生成中间表中参考自Teacher的外键    inverseJoinColumns = { @JoinColumn(name="student_id")}// inverseJoinColumns配置的是反转的对象(即Student)的idstudent_id是中间表中参考自Student的外键    )  public Set<Student> getStudents() {    return students;  }  public void setStudents(Set<Student> students) {    this.students = students;  }  }

Student类:

package cn.orlion.hibernate.model;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;@Entitypublic class Student {  private int id;    private String name;  @Id  @GeneratedValue  public int getId() {    return id;  }  public void setId(int id) {    this.id = id;  }  public String getName() {    return name;  }  public void setName(String name) {    this.name = name;  }}

生成的sql语句:

create table Student (    id integer not null auto_increment,    name varchar(255),    primary key (id)  )create table Teacher (    id integer not null auto_increment,    name varchar(255),    primary key (id)  )create table t_s (    teacher_id integer not null,    student_id integer not null,    primary key (teacher_id, student_id)  )alter table t_s     add constraint FK_3no0wm9bwtogr87t4gvd4t3x5     foreign key (student_id)     references Student (id)alter table t_s     add constraint FK_pj2fmd6skwfi7jm2avlo4n6mf     foreign key (teacher_id)     references Teacher (id)

 

二、多对多双向关联

单向关联可一理解为:老师知道教的学生的名字,但是学生不知道教的多个老师。

双向关联可以理解为:老师知道教的学生的名字,学生也知道教的多个老师。

配置方式:Teacher类与单向关联相同,Student类添加Set<Teacher> teachers属性,在getTeaches()方法上添加注解@ManyToMany(mappedBy="students")

Teacher类:

package cn.orlion.hibernate.model;import java.util.HashSet;import java.util.Set;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.JoinTable;import javax.persistence.ManyToMany;@Entitypublic class Teacher {  private int id;    private String name;    private Set<Student> students = new HashSet<Student>();  @Id  @GeneratedValue  public int getId() {    return id;  }  public void setId(int id) {    this.id = id;  }  public String getName() {    return name;  }  public void setName(String name) {    this.name = name;  }  @ManyToMany  @JoinTable(name="t_s" , // t_s是生成的中间表的表名    joinColumns = { @JoinColumn(name="teacher_id")},    inverseJoinColumns = { @JoinColumn(name="student_id")}    )  public Set<Student> getStudents() {    return students;  }  public void setStudents(Set<Student> students) {    this.students = students;  }  }

Student类:

package cn.orlion.hibernate.model;import java.util.HashSet;import java.util.Set;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.ManyToMany;@Entitypublic class Student {  private int id;    private String name;    private Set<Teacher> teachers = new HashSet<Teacher>();  @Id  @GeneratedValue  public int getId() {    return id;  }  public void setId(int id) {    this.id = id;  }  public String getName() {    return name;  }  public void setName(String name) {    this.name = name;  }  @ManyToMany(mappedBy="students")  public Set<Teacher> getTeachers() {    return teachers;  }  public void setTeachers(Set<Teacher> teachers) {    this.teachers = teachers;  }}

生成的sql语句:

create table Student (    id integer not null auto_increment,    name varchar(255),    primary key (id)  )create table Teacher (    id integer not null auto_increment,    name varchar(255),    primary key (id)  )create table t_s (    teacher_id integer not null,    student_id integer not null,    primary key (teacher_id, student_id)  )alter table t_s     add constraint FK_3no0wm9bwtogr87t4gvd4t3x5     foreign key (student_id)     references Student (id)alter table t_s     add constraint FK_pj2fmd6skwfi7jm2avlo4n6mf     foreign key (teacher_id)     references Teacher (id)

 




原标题:hibernate(九)多对多关联

关键词:Hibernate

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

包能托运吗:https://www.goluckyvip.com/tag/102818.html
什么叫158航空托运包:https://www.goluckyvip.com/tag/102819.html
包航空球托运高尔夫:https://www.goluckyvip.com/tag/102820.html
甘肃省空运:https://www.goluckyvip.com/tag/102821.html
空运物流运输:https://www.goluckyvip.com/tag/102822.html
长治市空运:https://www.goluckyvip.com/tag/102823.html
最新研究:亚马逊、沃尔玛、Temu和Shein卖家重合率不断攀升:https://www.kjdsnews.com/a/1836554.html
三清山好玩乜?:https://www.vstour.cn/a/365182.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流