热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

hibernate笔记双向一对多映射方法

前两节写了两个例子,分别是单向多对一的映射和单向一对多的映射,这一节继续以这个例子讲一下双向一对多的映射方法,如下图所示:很多时候,我们既想从一对端获取多对端的信息,又想从多对端获

  前两节写了两个例子,分别是单向多对一的映射和单向一对多的映射,这一节继续以这个例子讲一下双向一对多的映射方法,如下图所示:

  很多时候,我们既想从一对端获取多对端的信息,又想从多对端获取一对端的数据,这就是需要双向一对多的映射关系,这也是最常见的表与表的映射关系,在hibernate中应当这样配置:

新建Studnet实体类:

public class Student {private int id;private String name;private String sex;private Grade grade;
//get/set方法省略
}

新建Grade实体类:

public class Grade {private int id;private String name;private String teacher;private Set students=new HashSet(0);//get/set方法省略
}

当前包下新建Student的映射文件Student.hbm.xml:

xml version="1.0"?>
DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package&#61;"com.wang.pojo"><class name&#61;"Student" ><id name&#61;"id"><generator class&#61;"native">generator>id><property name&#61;"name">property><property name&#61;"sex">property><many-to-one name&#61;"grade" class&#61;"Grade" column&#61;"gradeId" not-null&#61;"true">many-to-one>class>
hibernate-mapping>

当前包下新建Grade的映射文件Grade.hbm.xml:

xml version&#61;"1.0"?>
DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package&#61;"com.wang.pojo"><class name&#61;"Grade" ><id name&#61;"id"><generator class&#61;"native">generator>id><property name&#61;"name">property><property name&#61;"teacher">property><set name&#61;"students"><key column&#61;"gradeId" >key><one-to-many class&#61;"Student"/>set>class>
hibernate-mapping>

将两个映射文件添加到hibernate.cfg.xml中去,新建测试类,测试1:自动生成表结构2:存取数据3:读取数据(分别测试从Student一端读取,以及从grade一段读取):

&#64;Testpublic void testCreateDB() {Configuration cfg &#61; new Configuration().configure();SchemaExport se &#61; new SchemaExport(cfg);// 第一个参数是否生成ddl脚本 第二个参数是否执行到数据库se.create(true, true);}&#64;Testpublic void testSave() {Session session &#61; HibernateUtil.getSession();Transaction tx &#61; session.beginTransaction();// Score s&#61;new Score(2,12,97);// session.save(s);Grade g&#61;new Grade(1, "终极一班", "王大炮");Student s1&#61;new Student(12, "李云龙", "男", g);Student s2&#61;new Student(13, "赵刚", "男", g);session.save(g);session.save(s1);session.save(s2);tx.commit();session.close();}&#64;Testpublic void testGet() {Session session &#61; HibernateUtil.getSession();Transaction tx &#61; session.beginTransaction();//从Grade一端获取数据Grade g&#61;(Grade)session.get(Grade.class, 1);System.out.println("id&#61;"&#43;g.getId()&#43;"name&#61;"&#43;g.getName()&#43;"teacher&#61;"&#43;g.getTeacher());Iterator it &#61; g.getStudents().iterator();while(it.hasNext()){Student s&#61;it.next();System.out.println(s);}//从Student一端获取数据Student s1&#61;(Student)session.get(Student.class, 1);System.out.println(s1.getName()&#43;"&#61;&#61;&#61;&#61;&#61;"&#43;s1.getGrade().getName());tx.commit();session.close();}

  总结:在双向一对多的映射关系中,注意一的一端(Grade)配置:标签中不需要指定not-null&#61;"true";如果想要在一的一端(Grade)来维护关系,那么在多的一端(Student)不用指定关联列非空.



推荐阅读
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了如何清除Eclipse中SVN用户的设置。首先需要查看使用的SVN接口,然后根据接口类型找到相应的目录并删除相关文件。最后使用SVN更新或提交来应用更改。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
author-avatar
kelly最爱梁君诺_795
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有