Hibernate 关联映射
1.建立多对一的单向关联关系
01.配置单向多对一关联
Dept.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="cn.happy.entity"><class name="Dept" table="DEPT"><id name="deptNo"><generator class="sequence"><param name="sqeuence">SEQ_NUM</param></generator></id><set name="emps"><key column="DEPTNO"></key><one-to-many class="Emp"></one-to-many></set><property name="deptName"> </property></class></hibernate-mapping>
在以上映射代码中,dept属性使Dept类型,而EMP表的外键DEPTNO是整数类型,显然类型不匹配,因此不能使用<property>元素来映射dept属性,而要使用<many-to-one>元素;
<many-to-one>元素建立了dept属性和EMP表的DEPTNO之间的映射
Emp.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="cn.happy.entity"><class name="Emp" table="EMP"><id name="empid"><generator class="sequence"><param name="sqeuence">SEQ_NUM</param></generator></id><property name="empname" type="string"></property><many-to-one name="dept" column="deptNo" class="Dept"></many-to-one></class></hibernate-mapping>
03.测试类
@Testpublic void test(){Session session = HibernateUtil.currentSession();Transaction tx = session.beginTransaction();//开始一个事务Dept dept=new Dept();//部门dept.setDeptName("小卖部");session.save(dept);//保存部门对象Emp emp=new Emp();//员工emp.setEmpname("李狗蛋");session.save(emp);tx.commit();//关闭事务 HibernateUtil.closeSession();}
工具类
@Entity public class HibernateUtil {private static final ThreadLocal<Session> sessionTL=new ThreadLocal<Session>();private static Configuration configuration;private final static SessionFactory sessionFactory;static{try {configuration=new Configuration().configure();sessionFactory=configuration.buildSessionFactory();} catch (Exception e) {e.printStackTrace();throw new ExceptionInInitializerError(e);}}public static Session currentSession(){Session session=sessionTL.get();//如果session为null,则打开一个新的sessionif (session==null) {session=sessionFactory.openSession();sessionTL.set(session);}return session;}public static void closeSession(){Session session=sessionTL.get();sessionTL.set(null);session.close();} }
2.建立一对多双向关联关系
配置双向一对多关联
private Set<Emp> emps=new HashSet<Emp>();public Set<Emp> getEmps() {return emps;}public void setEmps(Set<Emp> emps) {this.emps = emps;}
在Dept.hbm.xml中写入<set>标签
<set name="emps"><key column="DEPTNO"></key><one-to-many class="Emp"></one-to-many></set>
<set>name属性:设定持久化的属性名
<key>:column属性设定与所关联的持久化类对应的表的外键
<one-to-many>:class属性设定与所关联的持久化类
01.测试类
@Testpublic void onetomanyTest(){Session session = HibernateUtil.currentSession();Transaction tx = session.beginTransaction();Dept dept = (Dept)session.load(Dept.class, 1);//建立dept对象和emp对象的一对多双向关联关系Set<Emp> emps = dept.getEmps();for (Emp emp : emps) {System.out.println(emp.getEmpname());}//session.save(dept);//保存dept对象tx.commit();//关闭事务 HibernateUtil.closeSession();}
@Testpublic void onetomanyTest(){Session session = HibernateUtil.currentSession();Transaction tx = session.beginTransaction();//建立dept对象和emp对象的一对多双向关联关系Dept dept=new Dept();Emp emp=new Emp();dept.setDeptName("中部");emp.setEmpname("张三");emp.setDept(dept);dept.getEmps().add(emp);//session.save(dept);//保存dept对象tx.commit();//关闭事务 HibernateUtil.closeSession();}
先创建一个Dept对象和Emp对象,接着建立两者的一对多双向关联关系,最后调用sessiom.save(dept)方法持久化Dept对象。
转载于:https://www.cnblogs.com/s1294/p/5765589.html
Hibernate 关联映射相关推荐
- Hibernate 关联映射 之 多对多 关联(二) 之拆分
1.由问题引出一个多对多拆分成两个多对一 问题:Hibernate 关联映射 之 多对多 关联(一)中中间表只是一个存放用户和角色的表,并无其他作用,如果客户有其他的需求,该表就无法扩展. 2.问题解 ...
- Oracle primary,unique,foreign 区别,Hibernate 关联映射
Oracle primary,unique,foreign 区别 转:http://www.cnblogs.com/henw/archive/2012/08/15/2639510.html NOT N ...
- hibernate关联映射_具有关联映射的Hibernate Composite ID
hibernate关联映射 最近,我们面临着带有复合id字段的Hibernate关联映射的棘手情况. 我们需要与一对一和多对一进行双向关联.我们的拖曳表是" REPORT"和&qu ...
- Hibernate关联映射(一对多/多对多)
版权声明:翀版 https://blog.csdn.net/biggerchong/article/details/84340105 3. Hibernate关联映射 上接Hibernate持久化类 ...
- (转)Hibernate关联映射——一对多(多对一)
http://blog.csdn.net/yerenyuan_pku/article/details/70152173 Hibernate关联映射--一对多(多对一) 我们以客户(Customer)与 ...
- (转)Hibernate关联映射——对象的三种关系
http://blog.csdn.net/yerenyuan_pku/article/details/70148618 Hibernate关联映射--对象的三种关系 Hibernate框架基于ORM设 ...
- HIbernate关联映射小案例(CRUD)
做了一个hibernate关联映射的小案例(CRUD),包含一对多.多对多的映射关系. 先看概念数据模型 Student表因可能出现重名所以采用联合主键. School实体类 package org. ...
- Hibernate 关联映射 之 多对多 关联(一)
1.了解几个知识点: 一.一般的设计中,多对多关联映射,需要一个中间表 二.Hibernate会自动生成中间表 三.Hibernate使用many-to-many标签来表示多对多的关联 四.多对多的关 ...
- hibernate关联映射:多对一、一对一
配置对象关联关系 - 单向一对多关系 - 例如:班级与学生 Grade类中 public class Grade{private int gid;private String gname;privat ...
- Java三大框架之——Hibernate关联映射与级联操作
什么是Hibernate中的关联映射? 简单来说Hibernate是ORM映射的持久层框架,全称是(Object Relational Mapping),即对象关系映射. 它将数据库中的表映射成对应的 ...
最新文章
- ArrayList之坑点
- alpine linux docker容器时区修改
- mac cad石材填充图案_CAD超级填充教程
- 城市规划理论1 选址理论
- 学了网络安全以后能做哪些岗位呢?来来来,带你们了解
- python的本质,讨论 - 廖雪峰的官方网站
- .NET Core 微信小程序支付——(统一下单)
- C语言 全局变量和局部变量区别 - C语言零基础入门教程
- LeetCode之Binary Tree Level Order Traversal 层序遍历二叉树
- learn go function callback
- mac mini u盘安装系统_U盘安装系统教程
- Visio2013 pro专业版本激活工具---- KMSpico_setup_visio
- 德国慕尼黑.NET俱乐部VS2019发布活动
- 51单片机串口SBUF是特殊寄存器,只要不写入新的数据就不会消失,写入新的数据就会覆盖之前的,单片机复位后初始值为不确定值
- 顺序栈(含有栈顶指针,栈底指针)的实现以及编写过程中的一些疑惑的解决
- 从零学习PyTorch(5)----整个天空都是灰蒙蒙的
- Netty是什么?Netty的优势
- 机械电子方向的一点心得
- java猜数字游戏课程设计报告_Java程序设计课程设计-猜数字游戏设计.doc
- 【算法】Manacher(马拉车)算法
热门文章
- yii2 mysql 队列_yii2.0 中的队列
- php安全性怎么样,PHP网站安全性浅谈
- 数据采集无线网服务器软件,WIFI智能数据盒
- android 工具 lve,Android Studio 4.0 新功能中的Live Layout Inspector详解
- 计算机网络中什么是突发错,计算机网络基础习题(含答案)
- golang语言中的关于err的函数封装事项的函数使用
- python中的递归函数如何表示_Python递归函数如何写?正确的Python递归函数用法!...
- Kotlint集合简单总结
- 保存单文件为mhtml
- 从武则天的故事看职场生涯规划的一个最重要方面