热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Hibernate树状映射

示例:类Org表示组织机构,是一个典型的树状结构数据,其属性包括:id,name,children,parent要将Org映射到数据库中,对parent作多对一的映射,对child

示例:

类Org表示组织机构,是一个典型的树状结构数据,其属性包括:

id,name,children,parent

要将Org映射到数据库中,对parent作多对一的映射,对children作一对多的映射。

我们可以通过三张表来解释其关系

,

代码实现:

1.建Org实体类

@Entity
public class Org {
	private int id;
	private String name;
	private Set childen = new HashSet();
	private Org parent;
	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@OneToMany(mappedBy="parent",cascade={CascadeType.ALL},fetch=FetchType.EAGER)
	public Set getChilden() {
		return childen;
	}
	public void setChilden(Set childen) {
		this.childen = childen;
	}
	@ManyToOne
	public Org getParent() {
		return parent;
	}
	public void setParent(Org parent) {
		this.parent = parent;
	}
}

2.建Junit测试类

@Test
public void testDelete() {
	new SchemaExport(new Configuration().configure()).create(true, true);
			
}

运行程序,在数据库中自动生成表org,有3个属性:id,name,parent_id(外键)

3.存储数据

@Test
public void testSave() {
		
	Session session = sf.getCurrentSession();
	session.beginTransaction();
		
	Org o = new Org();
	o.setName("总公司");
		
	Org o1 = new Org();
	o1.setName("分公司1");
		
	Org o2 = new Org();
	o2.setName("分公司2");
		
	Org o11 = new Org();
	o11.setName("分公司1_部门1");
		
	Org o12 = new Org();
	o12.setName("分公司1_部门2");
		
	Org o21 = new Org();
	o21.setName("分公司2_部门1");
		
	o.getChilden().add(o1);
	o.getChilden().add(o2);
	o1.getChilden().add(o11);
	o1.getChilden().add(o12);
	o2.getChilden().add(o21);
		
		
	o11.setParent(o1);
	o12.setParent(o1);
	o21.setParent(o2);
	o1.setParent(o);
	o2.setParent(o);
		
	session.save(o);

	session.getTransaction().commit();		
}

4.打印输出

@Test
public void testLoad() {
	
	Session session = sf.getCurrentSession();
	session.beginTransaction();
	
	Org o = (Org) session.load(Org.class, 1);
	print(o,0);

	session.getTransaction().commit();		
}

//通过递归方式,以树状结构,打印输出各对象的名字
private void print(Org o,int level) {
	for(int i=0;i
输出结果
总公司
----分公司1
--------分公司1_部门2
--------分公司1_部门1
----分公司2
--------分公司2_部门1
 

Hibernate 树状映射,,

Hibernate 树状映射


推荐阅读
  • MyBatis模糊查询和多条件查询一、ISmbmsUserDao层根据姓名模糊查询publicListgetUser();多条件查询publicList ... [详细]
  • 22.Container With Most Water(能装最多水的容器)
    thecontainercontainsthemos ... [详细]
  • 这一篇主要总结一下jQuery这个js在引入的时候做的一些初始化工作第一句window.undefinedwindow.undefined;是为了兼容低版本的IE而写的因为在低版本 ... [详细]
  • spotify engineering culture part 1
    原文,因为原视频说的太快太长,又没有字幕,于是借助youtube,把原文听&打出来了。中文版日后有时间再翻译。oneofthebigsucceessfactorshereatSpo ... [详细]
  • 抓取百万知乎用户设计之实体设计
    一.实体的关系实体是根据返回的Json数据来设计的教育经历方面用户可以有很多教育经理,USER和education是一对多的关系,一个education对应一个education一 ... [详细]
  • iOS之富文本
    之前做项目时遇到一个问题:使用UITextView显示一段电影的简介,由于字数比较多,所以字体设置的很小,行间距和段间距也很小,一大段文字挤在一起看起来很别扭,想要把行间距调大,结 ... [详细]
  • FroggerTimeLimit:1000MSMemoryLimit:65536KTotalSubmissions:32257Accepted:10396DescriptionFr ... [详细]
  • 九宫格计算. ... [详细]
  • 猫猫分享,必须精品原文地址:http:blog.csdn.netu013357243articledetails44571163素材地址:http:download.csdn.n ... [详细]
  • 本文分析和介绍了GLo ... [详细]
  • 代码:在mysql5.6,运行正常,5.7报错SELECTsum((selecta.numwherea.status1))astotalFROMmes_order_productA ... [详细]
  • Git(1)
    安装Git完毕(在开始菜单打开的话,打开的不是你想要的路径,切换路径很麻烦)1.D盘新建GitTest文件夹2.打开GitTest,在空白的地方右键,3.单击GitBashHere ... [详细]
  • Xib九宫格应用管理使用xib封装一个自定义view的步骤1新建一个继承UIView的自定义view,假设类名叫做(AppView)2新建一个AppView.xib文件来描述 ... [详细]
  • 【自制小工具】代码生成器
    【自制小工具】代码生成器陆陆续续接触过好几款代码生成工具,发现确实好用,但都会有那么点不完善的地方,所以索性就自己做一个吧。界面非常简单,反正是自己用的,简单点用起来也方便上图:左 ... [详细]
  • kepserver中文手册,kepserver使用教程,kepserver设置
    下面介绍一下KepServer模拟器的使用,以下示例使用服务器随附的Simulator驱动程序来演示创建、配置和运行项目的过程。Simulator驱动程序是基于内存的驱动程序,能为 ... [详细]
author-avatar
bale999_816
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有