一、多对一

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

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

二、修改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类的注解的配置;

  1. <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/

hibernate学习五(关系映射多对一与一对多)的更多相关文章

  1. Hibernate学习之关系映射(转)

    一.一对多 "一对多"是最普遍的映射关系,简单来讲就如消费者与订单的关系.一对多:从消费者角的度来说一个消费者可以有多个订单,即为一对多.多对一:从订单的角度来说多个订单可以对应一 ...

  2. Hibernate:对象关系映射(一对一,一对多,多对一,多对多)

    如需转载,请说明出处:http://www.cnblogs.com/gudu1/p/6895610.html Hibernate通过关系映射来表示数据库中表与表之间的关系,关系映射可以通过两种方式:配 ...

  3. Hibernate学习(二)关系映射----基于外键的单向一对一

    事实上,单向1-1与N-1的实质是相同的,1-1是N-1的特例,单向1-1与N-1的映射配置也非常相似.只需要将原来的many-to-one元素增加unique="true"属性, ...

  4. hibernate的对象/关系映射结果为空,exists查不到值的问题-20190823

    1: hibernate的对象/关系映射 情景:在使用@onetotone/@manytonone时关联结果为空 原因:在使用这个注解的时候,默认的时crossjoin(交叉连接),在进行查询时以及排 ...

  5. Hibernate学习笔记三:对象关系映射(一对一,一对多,多对一,多对多)

    如需转载,请说明出处:http://www.cnblogs.com/gudu1/p/6895610.html Hibernate通过关系映射来表示数据库中表与表之间的关系,关系映射可以通过两种方式:配 ...

  6. [原创]java WEB学习笔记85:Hibernate学习之路-- -映射 一对一关系 ,基于主键方式实现

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. [原创]java WEB学习笔记84:Hibernate学习之路-- -映射 一对一关系 ,基外键的方式实现

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. hibernate对象关系映射( 一对一,一对多,多对一,多对多的单向,双向映射 ——)

    对象之间的关系: 关系映射之间的关系只的是对象之间的关系,并不指数据库表的关系(外键关系)这儿解决的问题是当对象之间的关系之一时,数据库表该如何映射,编程上如何对待. 一对一(主键关联,和单向的外键关 ...

  9. [原创]java WEB学习笔记82:Hibernate学习之路---映射 一对多关联关系,配置,CRUD方法测试及注意点

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

随机推荐

  1. QT小技巧(书上没有的)

    1. Layout本身不能控制隐藏和显示,但是可以在外面专门套一个Widget,然后控制这个Widget就可以达到相应的效果了. 2. 空目录居然也存在 if (QDir(""). ...

  2. LINQ语句

    http://wenku.baidu.com/link?url=hPKqDWql7DNr6W2MsINakjRYYNXmXywB_U3h9FFMeFjcToYpusI2fYKgHjZSRq7r3ULG ...

  3. 关于haproxy hdr_reg(host) 的一些解释

    I've recently taken over an environment using HAProxy, and I'm attempting to learn the config and wh ...

  4. Python各种模块下载及安装配置

    方式1 在Python官网https://www.python.org/或者是github搜索进行下载 ,解压缩之后通过命令提示符进入已经解压缩文件夹根目录,输入下面的命令: python setup ...

  5. poj 水题系列

    题目:http://poj.org/problem?id=3006 筛选法求素数 #include <iostream> #include<cstdio> #include&l ...

  6. 西南科技大学第十届ACM程序设计竞赛题解

    A.德州扑克 B. 我恨11(1089) 问题描述 11是一个孤独的数字,小明十分讨厌这个数字,因此如果哪个数字中出现了11或者该数字是11的倍数,他同样讨厌这个数字.现在问题来了,在闭区间[L,R] ...

  7. 积和式Permanent在Mathematica中的运算

    Permanent[m_List] := With[{v = Array[x, Length[m]]}, Coefficient[Times @@ (m.v), Times @@ v]] 参考资料:  ...

  8. POJ 2001-Shortest Prefixes(Trie 入门)

    题意:给你一组串,求每个串在组中唯一标志的最短前缀 分析:保存树上经过各节点的单词个数,扫描每个串当经过节点单词个数是一(能唯一标志)结束 #include <map> #include ...

  9. HDU1540 Tunnel Warfare 水题

    分析:不需要线段树,set可过,STL大法好 #include <iostream> #include <cstdio> #include <cstring> #i ...

  10. 018如何建立自动化框架 how to bulid the framwork

    本讲包括: 一. objective 二. How to bulid 三. Keyview of frawork (关键视图) 四. conclusion automation framwork:自动 ...