Hibernate(9)_多对一的关联映射
本系列博客汇总在这里:Hibernate 汇总
多对一的关联映射
- 多对一的关联映射
- 1、创建模型
- 2、配置映射文件
- 3、测试多对一
- 保存
- 查询
源码工程文件为:hibernate4.3_04
多对一的关联映射
使用员工和球队的例子
类图:
数据库关系图:
1、创建模型
创建多的一端
package com.wyx.hiber.model;import java.util.Date;public class Emp
{private Integer empNo;private String ename;private Date birthday;private Integer gender;private String address;/*** 引入一的一端的类作为成员,指定多对一的关系* */private Team team;public Team getTeam(){return team;}public void setTeam(Team team){this.team = team;}public Integer getEmpNo(){return empNo;}public void setEmpNo(Integer empNo){this.empNo = empNo;}public String getEname(){return ename;}public void setEname(String ename){this.ename = ename;}public Date getBirthday(){return birthday;}public void setBirthday(Date birthday){this.birthday = birthday;}public Integer getGender(){return gender;}public void setGender(Integer gender){this.gender = gender;}public String getAddress(){return address;}public void setAddress(String address){this.address = address;}@Overridepublic String toString(){return "Emp [empNo=" + empNo + ", ename=" + ename + ", birthday="+ birthday + ", gender=" + gender + ", address=" + address+ "]";}}
创建一的一端
package com.wyx.hiber.model;public class Team
{private Integer tId;private String tName;private String loc;public Integer gettId(){return tId;}public void settId(Integer tId){this.tId = tId;}public String gettName(){return tName;}public void settName(String tName){this.tName = tName;}public String getLoc(){return loc;}public void setLoc(String loc){this.loc = loc;}@Overridepublic String toString(){return "Team [tId=" + tId + ", tName=" + tName + ", loc=" + loc + "]";}}
2、配置映射文件
配置多的一端
<?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="com.wyx.hiber.model"><class name="Emp" table="t_emp"><id name="empNo" column="emp_no"><generator class="native"></generator></id><property name="ename"></property><property name="birthday"></property><property name="gender"></property><property name="address"></property><!-- 指定多对一的关系name:多的一端(emp)的类中的一的类(team)的属性名column:建表后多的一端(t_emp)中的外键cascade:delete切记不要使用save-update级联保存或更新all包含了以上两种none不使用级联(默认的)--><many-to-one name="team" column="t_id" cascade="save-update"></many-to-one></class></hibernate-mapping>
配置一的一端
<?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="com.wyx.hiber.model"><class name="Team" table="t_team"><id name="tId" column="t_id"><generator class="native"></generator></id><property name="tName" column="t_name"></property><property name="loc"></property></class>
</hibernate-mapping>
Hibernate 的映射文件创建后要注册到我们的 hibernate.cfg.xml 中,然后导出数据库即可。
3、测试多对一
保存
public void testAdd()
{Session session = HibernateUtils.getSession();Transaction tx = session.beginTransaction();try{// 创建一支球队Team t = new Team();t.settName("公牛");t.setLoc("芝加哥");// 保存球队session.save(t);// 创建员工Emp emp = new Emp();emp.setEname("乔丹");emp.setGender(1);emp.setBirthday(new Date());emp.setAddress("芝加哥");Emp emp1 = new Emp();emp1.setEname("菲尔");emp1.setGender(1);emp1.setBirthday(new Date());emp1.setAddress("芝加哥");// 设置员工和球队的关系emp.setTeam(t);emp1.setTeam(t);// 保存员工session.save(emp);session.save(emp1);tx.commit();} catch (Exception e){e.printStackTrace();tx.rollback();} finally{HibernateUtils.closeResource(session);}
}
注意:在保存多的一端的时候一定要先保存一的一端,如果一的一端是瞬时对象就会报错
正确的输出
保存多对一的关系的时候也可以使用级联的方式
使用级联的保存就不需要单独保存一的一端了。
查询
使用 get 来查询
@Test
public void testQuery()
{Session session = HibernateUtils.getSession();try{// 调用get方法来查询指定要查询的类和idEmp emp = (Emp) session.get(Emp.class, 5);System.out.println(emp);System.out.println(emp.getTeam());} catch (Exception e){e.printStackTrace();} finally{HibernateUtils.closeResource(session);}
}
使用 load 来查询
@Test
public void testQuery1()
{Session session = HibernateUtils.getSession();try{// 调用load方法来查询指定要查询的类和idEmp emp = (Emp) session.load(Emp.class, 5);System.out.println(emp);System.out.println(emp.getTeam());} catch (Exception e){e.printStackTrace();} finally{HibernateUtils.closeResource(session);}
}
如有错误,欢迎指正!
Hibernate(9)_多对一的关联映射相关推荐
- [置顶] Hibernate从入门到精通(十)多对多单向关联映射
上一篇文章Hibernate从入门到精通(九)一对多双向关联映射中我们讲解了一下关于一对多关联映射的相关内容,这次我们继续多对多单向关联映射. 多对多单向关联映射 在讲解多对多单向关联映射之前,首先看 ...
- [置顶] Hibernate从入门到精通(十一)多对多双向关联映射
上次我们在中Hibernate从入门到精通(十)多对多单向关联映射讲解了一下多对多单向关联映射,这次我们讲解一下七种映射中的最后一种多对多双向关联映射. 多对多双向关联映射 按照我们之前的惯例,先看一 ...
- Hibernate从入门到精通(十)多对多单向关联映射
上一篇文章Hibernate从入门到精通(九)一对多双向关联映射中我们讲解了一下关于一对多关联映射的相关内容,这次我们继续多对多单向关联映射. 多对多单向关联映射 在讲解多对多单向关联映射之前,首先看 ...
- Hibernate 关联映射 之 多对多 关联(一)
1.了解几个知识点: 一.一般的设计中,多对多关联映射,需要一个中间表 二.Hibernate会自动生成中间表 三.Hibernate使用many-to-many标签来表示多对多的关联 四.多对多的关 ...
- 【Hibernate框架】关联映射(多对多关联映射)
按着我们的总结行进计划,接下来,就是有关于多对多映射的总结了. 我们来举个例子啊,很长时间以来,房价暴涨不落,但是还有很多人拥有很多套房产,假如说,一个富豪拥有九套房产,家里人么准去住哪一套,我们就以 ...
- NHibernate从入门到精通系列(7)——多对一关联映射
内容摘要 多对一关联映射概括 多对一关联映射插入和查询 多对一关联映配置介绍 一.多对一关联映射概括 关联关系是实体类与实体类之间的结构关系,分别为"多对一"."一对一& ...
- 【SSH进阶之路】Hibernate映射——一对一单向关联映射(五)
[SSH进阶之路]Hibernate基本原理(一) ,小编介绍了Hibernate的基本原理以及它的核心,采用对象化的思维操作关系型数据库. [SSH进阶之路]Hibernate搭建开发环境+简单实例 ...
- Hibernate 关联映射 之 多对多 关联(二) 之拆分
1.由问题引出一个多对多拆分成两个多对一 问题:Hibernate 关联映射 之 多对多 关联(一)中中间表只是一个存放用户和角色的表,并无其他作用,如果客户有其他的需求,该表就无法扩展. 2.问题解 ...
- 【Hibernate步步为营】--关联映射之多对一
上篇文章讨论了Hibernate的基本映射,一个实体类对应着一张表,在相应的Hibernate Mapping文件中使用<class>标签映射.并且实体类中的普通属性对应着表字段,使用&l ...
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
在我们以前的数据库设计中,设计表就不是一件轻松的事情.多种事物之间往往都是有这样那样的关系的.那怎样设计表格,才能既将事情描述明白,又能使数据库设计的比较合理呢?那里我们提供了好多规范,好多约束来满足 ...
最新文章
- centos7安装redmine3.4
- 设置VS2010中使用IntelliTrace来进行调试
- PHP——获取当前日期时间错误解决方案(PHP当前时区设置)
- diy计算机组装注意事项,自己组装电脑要注意什么?DIY老司机教你装机注意事项...
- 可网管交换机与非网管交换机的区别
- 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 11丨产品销售分析 II【难度简单】
- 多点生活在 Service Mesh 上的实践
- 求某一维度的最大值_高中数学函数求最值常用方法总结
- 2013 8.20 ip地址的计算总结
- python for 格式化字符串 list.count
- python zip函数_Python zip()函数
- ansys电力变压器模型_最佳变压器模型的超参数优化
- C语言冒泡排序法及代码
- PDM的工程图纸管理解决方案
- 基于QT,cyapi的CYUSB3014,USB3.0上位机编写
- ICC2 user guide(二)Placement and Optimization
- 蚂蚁金服 Service Mesh 双十一实战
- 2022-2028全球及中国2-降冰片烯行业研究及十四五规划分析报告
- Tomcat源码解析:启动
- 数码管:3位6脚的数码管分析和编码
热门文章
- vue---隐藏登录页面导航栏,登录成功跳转页面出现导航栏
- 毕业设计:实现电脑识别魔方颜色
- Java学习-java中的与或非
- GIS影像数据格式说明
- C#:实现一个将字符串转换为整数的方法
- redis streams_如何构建Redis Streams应用程序
- 全网搜索引擎采集(msray)|URL采集|关键词采集|域名采集
- DZ先生怪谈国标之视音频文件检索
- 统计原理笔记 Notes for Statistics I
- 多商家父订单子订单_70多份订单被退回,商家查看信息傻眼了,美团:封店180天...