Hibernate——樹狀映射,hibernate樹狀

來源:互聯網
上載者:User

Hibernate——樹狀映射,hibernate樹狀

樹狀映射

假設:

一張表的結構如下:

id

parent_id

name

 

 

 

公司組織架構即樹狀映射

範例:

package com.zgy.hibernate.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;

 

 

/*

 * Org類,表示組織架構的類

 */

@Entity

public class Org {

private int id;//編號

private String name;//名稱

private Set<Org> children = new HashSet<Org>();//Org的子類

private Org parent;//Org的父類

@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(cascade=CascadeType.ALL,mappedBy="parent",fetch=FetchType.EAGER)

public Set<Org> getChildren() {

return children;

}

public void setChildren(Set<Org> children) {

this.children = children;

}

@ManyToOne

@JoinColumn(name="parent_id")

public Org getParent() {

return parent;

}

public void setParent(Org parent) {

this.parent = parent;

}

}

 

 

測試:

package com.zgy.hibernate.model;

 

import java.util.Date;

import java.util.List;

 

import org.hibernate.Query; 

 

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.AnnotationConfiguration;

import org.hibernate.tool.hbm2ddl.SchemaExport;

import org.junit.AfterClass;

import org.junit.BeforeClass;

import org.junit.Test;

 

public class HibernateTreeTest {

private static SessionFactory sf;

@BeforeClass

public static void beforeClass() {

sf = new AnnotationConfiguration().configure().buildSessionFactory();

}

@AfterClass

public static void afterClass() {

sf.close();

}

@Test

public void testSchemaExport() {

new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);

}

@Test

public void testSave() {

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");

o.getChildren().add(o1);

o.getChildren().add(o2);

o1.getChildren().add(o11);

o2.getChildren().add(o12);

o11.setParent(o1);

o12.setParent(o1);

o1.setParent(o);

o2.setParent(o);

Session session = sf.openSession();

session.beginTransaction();

session.save(o);

session.getTransaction().commit();

session.close();

}

@Test

public void testLoad(){

testSave();

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) {

String preStr = "";

for(int i = 0 ; i < level ; i++){

preStr += "----";

}

System.out.println(preStr+o.getName());

for(Org child : o.getChildren()){

print(child,level+1);

}

}

public static void main(String[] args) {

beforeClass();

}

}




相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.