热门标签 | 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)不用指定关联列非空.



推荐阅读
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 突破MIUI14限制,自定义胶囊图标、大图标样式,支持任意APP
    本文介绍了如何突破MIUI14的限制,实现自定义胶囊图标和大图标样式,并支持任意APP。需要一定的动手能力和主题设计师账号权限或者会主题pojie。详细步骤包括应用包名获取、素材制作和封包获取等。 ... [详细]
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社区 版权所有