hibernate学习五(关系映射多对一与一对多)

一、多对一

  多对一(或者一对多):在学生与老师的情况下,一个老师可以教多个学生,但一个学生只能被教一个老师教;

  对于类:在多的那方拥有一的那方的一个实体

二、修改student.java和teacher.java类

  复制03工程,并更名为Hibernate_04_ManyToOne;

  在多的一方中添加@ManyToOne注解

 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     private Teacher teacher;
18     
19     @Id
20     @GeneratedValue
21     public int getId() {
22         return id;
23     }
24     public void setId(int id) {
25         this.id = id;
26     }
27     public String getName() {
28         return name;
29     }
30     public void setName(String name) {
31         this.name = name;
32     }
33     public int getAge() {
34         return age;
35     }
36     public void setAge(int age) {
37         this.age = age;
38     }
39     @ManyToOne
40     public Teacher getTeacher() {
41         return teacher;
42     }
43     public void setTeacher(Teacher teacher) {
44         this.teacher = teacher;
45     }
46 }
 1 package com.model;
 2 
 3 import javax.persistence.Entity;
 4 import javax.persistence.GeneratedValue;
 5 import javax.persistence.Id;
 6 import javax.persistence.Table;
 7 
 8 @Entity
 9 @Table(name="teacher")
10 public class Teacher {
11     private int id;
12     private String teacherName;
13     private int teacherAge;
14     private String title;
15     
16     @Id
17     @GeneratedValue
18     public int getId() {
19         return id;
20     }
21     public void setId(int id) {
22         this.id = id;
23     }
24     public String getTeacherName() {
25         return teacherName;
26     }
27     public void setTeacherName(String teacherName) {
28         this.teacherName = teacherName;
29     }
30     public int getTeacherAge() {
31         return teacherAge;
32     }
33     public void setTeacherAge(int teacherAge) {
34         this.teacherAge = teacherAge;
35     }
36     public String getTitle() {
37         return title;
38     }
39     public void setTitle(String title) {
40         this.title = title;
41     }
42 }

修改xml,添加使用teacher.java类的注解的配置;

        <mapping class="com.model.Teacher"/>

三、运行测试;

  

  

  结果:

  在student表中生成了一个外键,依赖teacher表,teacher表中没有特别的改变;

四、一对多

  一对多:对于类,在一的那方存在多的那方的集合

五、修改student和teahcer类

  复制04工程,并更名为Hibernate_05_OneToMany;

  在一的那方添加集合类(推荐set),并添加@OneToMany注解

 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 }
 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.OneToMany;
10 import javax.persistence.Table;
11 
12 @Entity
13 @Table(name="teacher")
14 public class Teacher {
15     private int id;
16     private String teacherName;
17     private int teacherAge;
18     private String title;
19     private Set<Student> students = new HashSet<Student>();
20     
21     @Id
22     @GeneratedValue
23     public int getId() {
24         return id;
25     }
26     public void setId(int id) {
27         this.id = id;
28     }
29     public String getTeacherName() {
30         return teacherName;
31     }
32     public void setTeacherName(String teacherName) {
33         this.teacherName = teacherName;
34     }
35     public int getTeacherAge() {
36         return teacherAge;
37     }
38     public void setTeacherAge(int teacherAge) {
39         this.teacherAge = teacherAge;
40     }
41     public String getTitle() {
42         return title;
43     }
44     public void setTitle(String title) {
45         this.title = title;
46     }
47     @OneToMany
48     public Set<Student> getStudents() {
49         return students;
50     }
51     public void setStudents(Set<Student> students) {
52         this.students = students;
53     }
54 }

六、测试运行

  

  结果生成了一张中间表teacher_student

  

PS:关于双向关联,可以在studenjava中添加字段Teacher teacher,并使用注解@ManyToOne;

PSS:有双向关联的情况,加上mappingBy;

----------------------------------------------------------------------------------------------------

此文为个人学习记录,如有参考转载,请注明出处 黑白熊的博客 http://www.cnblogs.com/xiong233/

posted @ 2017-01-08 12:04  熊熊熊摸了一下你的头  阅读(251)  评论(0编辑  收藏  举报