`

Hibernate映射树形结构

 
阅读更多

Orgnization.java

package com.test.hiberenate.model;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

@Entity
public class Orgnization {
	private int id;
	private String name;
	private Set<Orgnization> children = new HashSet<Orgnization>();
	private Orgnization 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<Orgnization> getChildren() {
		return children;
	}

	public void setChildren(Set<Orgnization> children) {
		this.children = children;
	}

	@ManyToOne
	@JoinColumn(name = "parent_id")
	public Orgnization getParent() {
		return parent;
	}

	public void setParent(Orgnization parent) {
		this.parent = parent;
	}

}

 

HibernateTreeTest.java

package com.test.hibernate.model;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import com.test.hiberenate.model.Orgnization;

public class HibernateTreeTest {
	private static SessionFactory sf = null;

	@BeforeClass
	public static void beforeClass() {
		new SchemaExport(new Configuration().configure()).create(false, true);
		try {
			if (sf == null) {
				sf = new Configuration().configure().buildSessionFactory();
			}
		} catch (HibernateException e) {
			e.printStackTrace();
		}
	}

	@AfterClass
	public static void afterClass() {
		sf.close();
	}

	@Test
	public void testSave() {
		Orgnization o = new Orgnization();
		o.setName("总公司");
		Orgnization o1 = new Orgnization();
		o1.setName("分公司1");
		Orgnization o2 = new Orgnization();
		o2.setName("分公司2");
		Orgnization o21 = new Orgnization();
		o21.setName("分公司2下部门1");
		Orgnization o22 = new Orgnization();
		o22.setName("分公司2下部门2");
		o.getChildren().add(o1);
		o.getChildren().add(o2);
		o2.getChildren().add(o21);
		o2.getChildren().add(o22);
		o1.setParent(o);
		o2.setParent(o);
		o21.setParent(o2);
		o22.setParent(o2);

		Session session = sf.openSession();
		session.beginTransaction();
		session.save(o);
		session.getTransaction().commit();
		session.close();
	}

	@Test
	public void testLoad() {
		testSave();
		Session session = sf.openSession();
		session.beginTransaction();
		Orgnization o = (Orgnization) session.load(Orgnization.class, 1);
		this.printChildren(o, 0);
		session.getTransaction().commit();
		session.close();
	}

	private void printChildren(Orgnization o, int level) {
		String str = "";
		for (int i = 0; i < level; i++) {
			str += "---";
		}
		System.out.println(str + o.getName());
		for (Orgnization children : o.getChildren()) {
			this.printChildren(children, level + 1);
		}
	}

	public static void main(String[] args) {
		beforeClass();
	}

}

 

分享到:
评论

相关推荐

    Hibernate学习笔记

    001 Hibernate 简介(开源 O/R 映射框架) 002 第一个 Hibernate 示例 003 hibernate 主要接口...026 hibernate 操作树形结构 027 hibernate 查询语言(HQL) 028 hibernate 缓存(性能优化策略) 029 hibernate 抓取策略

    OA系统的毕业设计的毕业论文

    5.2.1 创建并配置Hibernate映射文件 37 5.2.2 开发并配置Hibernate DAO层 38 5.3 控制层Struts实现 38 5.3.1 开发Struts核心流程代码 38 5.3.2 开发JSP页面原型 40 5.3.3 增加表单校验功能 40 5.3.4 调用DAO组件操作...

    SqlToolBox 1.8.2

    成功连接到数据库以后,数据库的Schema和table结构会在画面的左边以树的形式展现出来,如果展现的内容过多,您还可以在上方的“过滤器”输入栏中输入关键字以缩小展现范围。在这颗树中,表格(table)是以小圆点的...

    JAVA上百实例源码以及开源项目

    1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高...

    JAVA上百实例源码以及开源项目源代码

    1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高...

    java源码包---java 源码 大量 实例

    1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高...

    java源码包2

    1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高...

    java源码包3

    1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高...

    java源码包4

    1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    EJB中JNDI的使用源码例子 1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    EJB中JNDI的使用源码例子 1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件...

Global site tag (gtag.js) - Google Analytics