多对一关联关系和上一篇讲的一对多关联关系的不同点主要体现在映射文件上。

Student类:

  1. package com.imooc.entity;
  2.  
  3. import java.io.Serializable;
  4.  
  5. public class Student implements Serializable {
  6.  
  7. private int sid;
  8. private String sname;
  9. private String sex;
  10. // 在多方定义一个一方的引用
  11. private Grade grade;
  12.  
  13. public int getSid() {
  14. return sid;
  15. }
  16. public void setSid(int sid) {
  17. this.sid = sid;
  18. }
  19. public String getSname() {
  20. return sname;
  21. }
  22. public void setSname(String sname) {
  23. this.sname = sname;
  24. }
  25. public String getSex() {
  26. return sex;
  27. }
  28. public void setSex(String sex) {
  29. this.sex = sex;
  30. }
  31. public Grade getGrade() {
  32. return grade;
  33. }
  34. public void setGrade(Grade grade) {
  35. this.grade = grade;
  36. }
  37.  
  38. public Student() {
  39. super();
  40. }
  41.  
  42. public Student(String sname, String sex) {
  43. super();
  44. this.sname = sname;
  45. this.sex = sex;
  46. }
  47.  
  48. }

Grade类:

  1. package com.imooc.entity;
  2.  
  3. import java.io.Serializable;
  4. import java.util.HashSet;
  5. import java.util.Set;
  6.  
  7. public class Grade implements Serializable {
  8.  
  9. private int gid;
  10. private String gname;
  11. private String gdesc;
  12. private Set<Student> students = new HashSet<Student>();
  13.  
  14. public int getGid() {
  15. return gid;
  16. }
  17. public void setGid(int gid) {
  18. this.gid = gid;
  19. }
  20. public String getGname() {
  21. return gname;
  22. }
  23. public void setGname(String gname) {
  24. this.gname = gname;
  25. }
  26. public String getGdesc() {
  27. return gdesc;
  28. }
  29. public void setGdesc(String gdesc) {
  30. this.gdesc = gdesc;
  31. }
  32. public Set<Student> getStudents() {
  33. return students;
  34. }
  35. public void setStudents(Set<Student> students) {
  36. this.students = students;
  37. }
  38.  
  39. public Grade() {
  40. super();
  41. }
  42.  
  43. public Grade(int gid, String gname, String gdesc) {
  44. super();
  45. this.gid = gid;
  46. this.gname = gname;
  47. this.gdesc = gdesc;
  48. }
  49.  
  50. public Grade(String gname, String gdesc) {
  51. super();
  52. this.gname = gname;
  53. this.gdesc = gdesc;
  54. }
  55. }

Student.hbm.xml

  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  4. <!-- Generated 2017-6-1 14:49:09 by Hibernate Tools 3.5.0.Final -->
  5. <hibernate-mapping>
  6. <class name="com.imooc.entity.Student" table="STUDENT">
  7. <id name="sid" type="int">
  8. <column name="SID" />
  9. <generator class="increment" />
  10. </id>
  11. <property name="sname" type="java.lang.String">
  12. <column name="SNAME" />
  13. </property>
  14. <property name="sex" type="java.lang.String">
  15. <column name="SEX" />
  16. </property>
  17. <!-- 配置多对一关联关系 -->
  18. <many-to-one name="grade" class="com.imooc.entity.Grade" column="gid" cascade="all"></many-to-one>
  19. </class>
  20. </hibernate-mapping>

Grade.hbm.xml

  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  4. <!-- Generated 2017-6-1 14:49:09 by Hibernate Tools 3.5.0.Final -->
  5. <hibernate-mapping>
  6. <class name="com.imooc.entity.Grade" table="GRADE">
  7. <id name="gid" type="int">
  8. <column name="GID" />
  9. <generator class="increment" />
  10. </id>
  11. <property name="gname" type="java.lang.String">
  12. <column name="GNAME" length="20" not-null="true" />
  13. </property>
  14. <property name="gdesc" type="java.lang.String">
  15. <column name="GDESC" />
  16. </property>
  17. </class>
  18. </hibernate-mapping>

hibernate.cfg.xml文件保持不变

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-configuration PUBLIC
  3. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  4. "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
  5. <hibernate-configuration>
  6. <session-factory>
  7. <property name="connection.username">root</property>
  8. <property name="connection.password">root</property>
  9. <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
  10. <property name="connection.url">
  11. <![CDATA[
  12. jdbc:mysql://localhost:3306/hibernate?useUnicode=true&amp;characterEncoding=UTF-8
  13. ]]>
  14. </property>
  15. <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
  16. <property name="show_sql">true</property>
  17. <property name="format_sql">true</property>
  18. <property name="hbm2ddl.auto">update</property>
  19.  
  20. <!-- 指定映射文件的路径 -->
  21. <mapping resource="com/imooc/entity/Grade.hbm.xml" />
  22. <mapping resource="com/imooc/entity/Student.hbm.xml" />
  23. </session-factory>
  24. </hibernate-configuration>

Test测试类:

  1. package com.imooc.test;
  2.  
  3. import org.hibernate.Session;
  4. import org.hibernate.Transaction;
  5.  
  6. import com.imooc.entity.Grade;
  7. import com.imooc.entity.Student;
  8. import com.imooc.util.HibernateUtil;
  9.  
  10. /*
  11. * 单向多对一(学生--->班级)
  12. */
  13. public class Test {
  14.  
  15. public static void main(String[] args) {
  16. save();
  17. }
  18.  
  19. public static void save() {
  20. Grade g = new Grade("java一班", "Java软件开发一班");
  21. Student s1 = new Student("杨过","男");
  22. Student s2 = new Student("小龙女", "女");
  23.  
  24. // 设置关联关系
  25. g.getStudents().add(s1);
  26. g.getStudents().add(s2);
  27. s1.setGrade(g);
  28. s2.setGrade(g);
  29.  
  30. Session session = HibernateUtil.getSession();
  31. Transaction tr = session.beginTransaction();
  32. session.save(g);
  33. session.save(s1);
  34. session.save(s2);
  35. tr.commit();
  36. HibernateUtil.closeSession(session);
  37. }
  38. }

hibernate_09_关联映射_多对一的更多相关文章

  1. 009一对一 主键关联映射_单向(one-to-one)

    009一对一  主键关联映射_单向(one-to-one) ²  两个对象之间是一对一的关系,如Person-IdCard(人—身份证号) ²  有两种策略可以实现一对一的关联映射 主键关联:即让两个 ...

  2. 011一对一 唯一外键关联映射_单向(one-to-one)

    ²  两个对象之间是一对一的关系,如Person-IdCard(人—身份证号) ²  有两种策略可以实现一对一的关联映射 主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系:数据库 ...

  3. 【Hibernate框架】关联映射(多对多关联映射)

    按着我们的总结行进计划,接下来,就是有关于多对多映射的总结了. 我们来举个例子啊,很长时间以来,房价暴涨不落,但是还有很多人拥有很多套房产,假如说,一个富豪拥有九套房产,家里人么准去住哪一套,我们就以 ...

  4. 012一对一 唯一外键关联映射_双向(one-to-one)

    ²  两个对象之间是一对一的关系,如Person-IdCard(人—身份证号) ²  有两种策略可以实现一对一的关联映射 主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系:数据库 ...

  5. 010一对一 主键关联映射_双向(one-to-one)

    ²  两个对象之间是一对一的关系,如Person-IdCard(人—身份证号) ²  有两种策略可以实现一对一的关联映射 主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系:数据库 ...

  6. MyBatis学习(七)MyBatis关联映射之多对多映射

    对于数据库中的多对多关系建议使用一个中间表来维护关系. 1.创建四张表,分别为用户表,商品表,订单表,中间表. DROP TABLE IF EXISTS `t_user`; CREATE TABLE ...

  7. Hibernate关联映射(多对一 --- many-to-one)

    转自:https://blog.csdn.net/fengxuezhiye/article/details/7369786?utm_source=blogxgwz9 Hibernate的关联映射关系有 ...

  8. mybatis_11关联查询_多对多

    一对一:模型里面有模型 一对多:模型里面有集合 多对多:集合里面有集合   映射思路 pojo类设计思路 v  将用户信息映射到user中. v  在user类中添加订单列表属性List<Ord ...

  9. hibernate_08_关联映射_一对多

    hibernate的映射关系 一对多.多对一.一对一.多对多. 常用的是一对多和多对一. 在数据库中可以通过添加主外键的关联,表现一对多的关系:在hibernate中通过在一方持有多方的集合实现,即在 ...

随机推荐

  1. Ajax基本写法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. 第十四节:pandas之merge()合并

    Pandas提供了一个merge()函数,作为DataFrame对象之间所有标准数据库连接操作的入口pandas.merge(left,right,how='inner',on=None,left_o ...

  3. SSL常用专业缩略语汇总

    JKS - Java KeyStore JAVA密钥库 OCSP - Online Certificate Status Protocol证书在线状态协议. SAN - Subject Alterna ...

  4. 【郑轻邀请赛 A】tmk射气球

    [题目链接]:https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=2127 [题意] [题解] 把气球和飞艇所代表的直线投影到xoy面上 设气球所在位置为 ...

  5. Java 注解之总结

    注解是Spring和Mybatis框架所大量使用的技术,要想掌握框架相关技术,注解是必须要掌握的. 掌握注解的优势: 1.能够读懂别人写的代码,特别是框架相关的代码. 2.本来可能需要很多配置文件,需 ...

  6. java 垃圾收集

    1.为什么使用垃圾收集 a.把用户从释放占用内存的重担中解救出来 b.帮助程序保持完整性 2.垃圾收集算法 检测出垃圾对象,必须回收垃圾对象所使用的堆空间并还给程序 垃圾检测:通过建立一个根对象集合并 ...

  7. C - Reading comprehension 二分法 求等比数列前N项和

    Read the program below carefully then answer the question. #pragma comment(linker, "/STACK:1024 ...

  8. ZooKeeper可视化Web管理工具收集(待实践)

    原来ZooKeeper是有Web管理后台的.但是仅限于操作ZooKeeper的数据,如果要监控性能,估计要借助Nagios去配合. 这些工具应该ZK UI最好用,下面是收集的一些工具安装教程: htt ...

  9. maven的启动类和MAVEN_OPTS参数

    maven的启动类和MAVEN_OPTS参数 在mvn.cmd的155行, set CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launc ...

  10. linux面试之--堆、栈、自由存储区、全局/静态存储区和常量存储区

    栈,就是那些由编译器在须要的时候分配,在不须要的时候自己主动清除的变量的存储区.里面的变量一般是局部变量.函数參数等.在一个进程中.位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用.和堆 ...