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 关联映射相关推荐

  1. Hibernate 关联映射 之 多对多 关联(二) 之拆分

    1.由问题引出一个多对多拆分成两个多对一 问题:Hibernate 关联映射 之 多对多 关联(一)中中间表只是一个存放用户和角色的表,并无其他作用,如果客户有其他的需求,该表就无法扩展. 2.问题解 ...

  2. Oracle primary,unique,foreign 区别,Hibernate 关联映射

    Oracle primary,unique,foreign 区别 转:http://www.cnblogs.com/henw/archive/2012/08/15/2639510.html NOT N ...

  3. hibernate关联映射_具有关联映射的Hibernate Composite ID

    hibernate关联映射 最近,我们面临着带有复合id字段的Hibernate关联映射的棘手情况. 我们需要与一对一和多对一进行双向关联.我们的拖曳表是" REPORT"和&qu ...

  4. Hibernate关联映射(一对多/多对多)

    版权声明:翀版 https://blog.csdn.net/biggerchong/article/details/84340105 3.  Hibernate关联映射 上接Hibernate持久化类 ...

  5. (转)Hibernate关联映射——一对多(多对一)

    http://blog.csdn.net/yerenyuan_pku/article/details/70152173 Hibernate关联映射--一对多(多对一) 我们以客户(Customer)与 ...

  6. (转)Hibernate关联映射——对象的三种关系

    http://blog.csdn.net/yerenyuan_pku/article/details/70148618 Hibernate关联映射--对象的三种关系 Hibernate框架基于ORM设 ...

  7. HIbernate关联映射小案例(CRUD)

    做了一个hibernate关联映射的小案例(CRUD),包含一对多.多对多的映射关系. 先看概念数据模型 Student表因可能出现重名所以采用联合主键. School实体类 package org. ...

  8. Hibernate 关联映射 之 多对多 关联(一)

    1.了解几个知识点: 一.一般的设计中,多对多关联映射,需要一个中间表 二.Hibernate会自动生成中间表 三.Hibernate使用many-to-many标签来表示多对多的关联 四.多对多的关 ...

  9. hibernate关联映射:多对一、一对一

    配置对象关联关系 - 单向一对多关系 - 例如:班级与学生 Grade类中 public class Grade{private int gid;private String gname;privat ...

  10. Java三大框架之——Hibernate关联映射与级联操作

    什么是Hibernate中的关联映射? 简单来说Hibernate是ORM映射的持久层框架,全称是(Object Relational Mapping),即对象关系映射. 它将数据库中的表映射成对应的 ...

最新文章

  1. ArrayList之坑点
  2. alpine linux docker容器时区修改
  3. mac cad石材填充图案_CAD超级填充教程
  4. 城市规划理论1 选址理论
  5. 学了网络安全以后能做哪些岗位呢?来来来,带你们了解
  6. python的本质,讨论 - 廖雪峰的官方网站
  7. .NET Core 微信小程序支付——(统一下单)
  8. C语言 全局变量和局部变量区别 - C语言零基础入门教程
  9. LeetCode之Binary Tree Level Order Traversal 层序遍历二叉树
  10. learn go function callback
  11. mac mini u盘安装系统_U盘安装系统教程
  12. Visio2013 pro专业版本激活工具---- KMSpico_setup_visio
  13. 德国慕尼黑.NET俱乐部VS2019发布活动
  14. 51单片机串口SBUF是特殊寄存器,只要不写入新的数据就不会消失,写入新的数据就会覆盖之前的,单片机复位后初始值为不确定值
  15. 顺序栈(含有栈顶指针,栈底指针)的实现以及编写过程中的一些疑惑的解决
  16. 从零学习PyTorch(5)----整个天空都是灰蒙蒙的
  17. Netty是什么?Netty的优势
  18. 机械电子方向的一点心得
  19. java猜数字游戏课程设计报告_Java程序设计课程设计-猜数字游戏设计.doc
  20. 【算法】Manacher(马拉车)算法

热门文章

  1. yii2 mysql 队列_yii2.0 中的队列
  2. php安全性怎么样,PHP网站安全性浅谈
  3. 数据采集无线网服务器软件,WIFI智能数据盒
  4. android 工具 lve,Android Studio 4.0 新功能中的Live Layout Inspector详解
  5. 计算机网络中什么是突发错,计算机网络基础习题(含答案)
  6. golang语言中的关于err的函数封装事项的函数使用
  7. python中的递归函数如何表示_Python递归函数如何写?正确的Python递归函数用法!...
  8. Kotlint集合简单总结
  9. 保存单文件为mhtml
  10. 从武则天的故事看职场生涯规划的一个最重要方面