自关联:本质还是原来双向一对多,原来要配置两个类,现在全部都配置在一个类里面

Employee

public class Employee {private Long id;private String name;// 多对一: 多个员工对一上级private Employee manager;// 一对多:一个领导有多个下级private Set<Employee> children = new HashSet<Employee>();

Employee.hbm.xml

<class name="Employee" table="t_employee"><id name="id"><generator class="native" /></id><property name="name" /><!-- private Employee manager;// 多对一: 多个员工对一上级 --><many-to-one name="manager" column="manager_id" class="Employee"/><!-- private Set<Employee> children = new HashSet<Employee>();// 一对多:一个领导有多个下级 --><set name="children" inverse="true" cascade="save-update"><key column="manager_id" /><one-to-many class="Employee" /></set></class>

MainTest

public class MainTest {Session session = null;@Beforepublic void save() {session = HibernateUtils.INSTANCE.getSession();session.beginTransaction();Employee boss = new Employee("boss");Employee manager = new Employee("manager");Employee emp1 = new Employee("emp1");Employee emp2 = new Employee("emp2");manager.addEmployee(emp1).addEmployee(emp2);boss.addEmployee(manager);session.save(boss);}@Testpublic void get() {Employee boss = (Employee) session.get(Employee.class, 1L);System.out.println("boss:" + boss.getName());Set<Employee> employees = boss.getChildren();for (Employee manager : employees) {System.out.println("manager:" + manager.getName());Set<Employee> children = manager.getChildren();for (Employee employee : children) {System.out.println("employee:" + employee.getName());}}}@Afterpublic void colse() {session.getTransaction().commit();session.close();}
}

源码地址

https://github.com/je-ge/hibernate

如果觉得我的文章对您有帮助,请予以打赏。您的支持将鼓励我继续创作!谢谢!

转载于:https://www.cnblogs.com/je-ge/p/6105500.html

Hibernate 系列教程9-自关联相关推荐

  1. Hibernate 系列 02 - Hibernate介绍及其环境搭建

    引导目录: Hibernate 系列教程 目录 昨晚喝多了,下午刚清醒,继续搞Hibernate.走起. 觉得还行的话,记得点赞哈,给我这个渣渣点学习的动力.有错误的话也请指出,省的我在错误上走了不归 ...

  2. python机器学习案例系列教程——关联分析(Apriori、FP-growth)

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 关联分析的基本概念 关联分析(Association Analysis):在大规模数据集中寻找有趣的关系. 频繁项集(Frequent ...

  3. HTML弧度文本,[js高手之路] html5 canvas系列教程 - 文本样式(strokeText,fillText,measureText,textAlign,textBaseline)...

    canvas提供两种输出文本的方式: strokeText:描边文本 fillText:填充文本 fillStyle配合fillText使用,strokeStyle配合strokeText使用 str ...

  4. Java容器--2021面试题系列教程(附答案解析)--大白话解读--JavaPub版本

    Java容器–2021面试题系列教程(附答案解析)–大白话解读–JavaPub版本 前言 序言 再高大上的框架,也需要扎实的基础才能玩转,高频面试问题更是基础中的高频实战要点. 适合阅读人群 Java ...

  5. asp.NET自定义服务器控件内部细节系列教程四

    如大家要转载,请保留本人的版权: /* *Description:asp.NET自定义服务器控件内部细节系列教程 *Auther:崇崇-天真的好蓝 *MSN:chongchong2008@msn.co ...

  6. Provisioning Services 7.8 入门系列教程之十四 UEFI支持和BOOTPTAB 编辑器

     续Provisioning Services 7.8 入门系列教程之十三 使用 Boot Device Management(BDM) UEFI,全称Unified Extensible Firmw ...

  7. mybatis实体类注解_SpringBoot2.x系列教程43--整合使用Mybatis

    SpringBoot2.x系列教程43--整合使用Mybatis 作者:一一哥 在上一节中,我带大家学习了Spring Boot中整合JPA,那接下来这一章节中,我继续带领大家学习如何在Spring ...

  8. Java NIO 系列教程

    Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API.本系列教程将有助于你学习和理解Java NIO. Java NIO提供了与 ...

  9. (Hibernate进阶)Hibernate系列——总结篇(九)

    这篇博文是hibernate系列的最后一篇,既然是最后一篇,我们就应该进行一下从头到尾,整体上的总结,将这个系列的内容融会贯通. 概念 Hibernate是一个对象关系映射框架,当然从分层的角度看,我 ...

最新文章

  1. 多台计算机怎样才能同时使用互联网,如何实现一台路由器多台计算机同时上网...
  2. 变参标准函数的重新封装,如printf
  3. 【杂谈】计算机视觉在人脸图像领域的十几个大的应用方向,你懂了几分?
  4. SAP与Ariba在数据分析领域的互补共赢
  5. ITK:在图像中线性插值位置
  6. 【Hibernate】JDBC操作与hibernate的区别
  7. cesiumjs开发实践(七) 3D模型
  8. Zookeeper+Kafka集群搭建
  9. 自动驾驶汽车也能聊天?
  10. 如何修改leaflet的marker图标
  11. Minimum Flips to Make a OR b Equal to c(C++ 或运算的最小翻转次数)
  12. 内存模型与C++ 内存序
  13. 论文阅读《PatchMatchNet: Learned Multi-View Patchmatch Stereo》
  14. 小米商城项目api接口编写日志
  15. 英文破折号(em dash)、连接号(en dash)与连字符(hyphen)的区别及各自用法是什么?...
  16. Windows下 wget 的安装与使用
  17. ffmpeg播放器声音效果2-变速不变调及变调
  18. PHP单文件读取excel操作数据库
  19. 计算机android开题报告,计算机本开题报告.docx
  20. [激光原理与应用-51]:《激光焊接质量实时监测系统研究》-2-激光焊接及其物理现象

热门文章

  1. compareHist函数
  2. 爬虫为什么用Chrome?
  3. 10.5 Throwable类
  4. Leetcode 刷题笔记
  5. MySQL 数据库规范--调优篇(终结篇)
  6. 第三章、Data语意学
  7. 初次树莓派遇到的一些小问题
  8. c\c++ 随机数函数
  9. (转)一步一步Asp.Net MVC系列_权限管理设计起始篇
  10. IRIS在win2003中安装 报 error while loading a DLL错误