hibernate学习六(关系映射多对多)
一、多对多
多对多:在学生与老师的情况下,一个老师可以教多个学生,一个学生可以被多个老师教;
对于类:某一方拥有另一方的一个集合类
二、修改student.java和teacher.java类(单向)
单向:老师知道自己教哪些学生,学生不知道教自己的老师
复制05工程,并更名为Hibernate_06_ManyToMany;
1 package com.model; 2 3 import java.util.HashSet; 4 import java.util.Set; 5 6 import javax.persistence.Entity; 7 import javax.persistence.GeneratedValue; 8 import javax.persistence.Id; 9 import javax.persistence.ManyToMany; 10 import javax.persistence.OneToMany; 11 import javax.persistence.Table; 12 13 @Entity 14 @Table(name="teacher") 15 public class Teacher { 16 private int id; 17 private String teacherName; 18 private int teacherAge; 19 private String title; 20 private Set<Student> students = new HashSet<Student>(); 21 22 @Id 23 @GeneratedValue 24 public int getId() { 25 return id; 26 } 27 public void setId(int id) { 28 this.id = id; 29 } 30 public String getTeacherName() { 31 return teacherName; 32 } 33 public void setTeacherName(String teacherName) { 34 this.teacherName = teacherName; 35 } 36 public int getTeacherAge() { 37 return teacherAge; 38 } 39 public void setTeacherAge(int teacherAge) { 40 this.teacherAge = teacherAge; 41 } 42 public String getTitle() { 43 return title; 44 } 45 public void setTitle(String title) { 46 this.title = title; 47 } 48 @ManyToMany 49 public Set<Student> getStudents() { 50 return students; 51 } 52 public void setStudents(Set<Student> students) { 53 this.students = students; 54 } 55 }
1 package com.model; 2 3 import javax.persistence.Embedded; 4 import javax.persistence.Entity; 5 import javax.persistence.GeneratedValue; 6 import javax.persistence.Id; 7 import javax.persistence.ManyToOne; 8 import javax.persistence.OneToOne; 9 import javax.persistence.Table; 10 11 @Entity 12 @Table(name="student") 13 public class Student { 14 private int id; 15 private String name; 16 private int age; 17 18 @Id 19 @GeneratedValue 20 public int getId() { 21 return id; 22 } 23 public void setId(int id) { 24 this.id = id; 25 } 26 public String getName() { 27 return name; 28 } 29 public void setName(String name) { 30 this.name = name; 31 } 32 public int getAge() { 33 return age; 34 } 35 public void setAge(int age) { 36 this.age = age; 37 } 38 }
三、运行测试
出现一张中间表,两个id分别依赖teahcer的id和student的id;
四、修改student.java和teacher.java类(双向)
双向:老师知道自己教了哪些学生,学生知道自己被哪几个老师教;
1 package com.model; 2 3 import java.util.HashSet; 4 import java.util.Set; 5 6 import javax.persistence.Embedded; 7 import javax.persistence.Entity; 8 import javax.persistence.GeneratedValue; 9 import javax.persistence.Id; 10 import javax.persistence.ManyToMany; 11 import javax.persistence.ManyToOne; 12 import javax.persistence.OneToOne; 13 import javax.persistence.Table; 14 15 @Entity 16 @Table(name="student") 17 public class Student { 18 private int id; 19 private String name; 20 private int age; 21 private Set<Teacher> teachers = new HashSet<Teacher>(); 22 23 @Id 24 @GeneratedValue 25 public int getId() { 26 return id; 27 } 28 public void setId(int id) { 29 this.id = id; 30 } 31 public String getName() { 32 return name; 33 } 34 public void setName(String name) { 35 this.name = name; 36 } 37 public int getAge() { 38 return age; 39 } 40 public void setAge(int age) { 41 this.age = age; 42 } 43 @ManyToMany(mappedBy="students") 44 public Set<Teacher> getTeachers() { 45 return teachers; 46 } 47 public void setTeachers(Set<Teacher> teachers) { 48 this.teachers = teachers; 49 } 50 }
1 package com.model; 2 3 import java.util.HashSet; 4 import java.util.Set; 5 6 import javax.persistence.Entity; 7 import javax.persistence.GeneratedValue; 8 import javax.persistence.Id; 9 import javax.persistence.ManyToMany; 10 import javax.persistence.OneToMany; 11 import javax.persistence.Table; 12 13 @Entity 14 @Table(name="teacher") 15 public class Teacher { 16 private int id; 17 private String teacherName; 18 private int teacherAge; 19 private String title; 20 private Set<Student> students = new HashSet<Student>(); 21 22 @Id 23 @GeneratedValue 24 public int getId() { 25 return id; 26 } 27 public void setId(int id) { 28 this.id = id; 29 } 30 public String getTeacherName() { 31 return teacherName; 32 } 33 public void setTeacherName(String teacherName) { 34 this.teacherName = teacherName; 35 } 36 public int getTeacherAge() { 37 return teacherAge; 38 } 39 public void setTeacherAge(int teacherAge) { 40 this.teacherAge = teacherAge; 41 } 42 public String getTitle() { 43 return title; 44 } 45 public void setTitle(String title) { 46 this.title = title; 47 } 48 @ManyToMany 49 public Set<Student> getStudents() { 50 return students; 51 } 52 public void setStudents(Set<Student> students) { 53 this.students = students; 54 } 55 }
五、测试运行
PS:虽然两次结果一样,但是双向关联中,可以通过teacher的students找到老师所教的学生,通过student的teachers找到学生的老师,单向只能从teacher的students找到老师所教的学生,而学生找不到老师
----------------------------------------------------------------------------------------------------
此文为个人学习记录,如有参考转载,请注明出处 黑白熊的博客 http://www.cnblogs.com/xiong233/