zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    第一次上传文件到linux服务器
    @JsonFormat与@DateTimeFormat的区别
    Tomcat端口被占用处理
    简单的Tomcat部署
    PHP源码加密,zend guard与ioncube
    PHP计算年龄
    My97DatePicker时间控件 JQuery UI
    php二维数组自定义排序
    CodeSmith Generator 7.0.2激活步骤
    SQL Server Management Studio 2008版本的安装
  • 原文地址:https://www.cnblogs.com/xiong233/p/6277034.html
Copyright © 2011-2022 走看看