首页 > Web开发 > 详细

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

时间:2017-01-08 12:58:01      阅读:223      评论:0      收藏:0      [点我收藏+]

一、多对一

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

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

二、修改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

  技术分享

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

原文:http://www.cnblogs.com/xiong233/p/6261763.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!