类文件:
TreeNode.java
 1package com.bebig.hibernate.model;
 2
 3import java.util.HashSet;
 4import java.util.Set;
 5
 6import javax.persistence.CascadeType;
 7import javax.persistence.Entity;
 8import javax.persistence.FetchType;
 9import javax.persistence.GeneratedValue;
10import javax.persistence.Id;
11import javax.persistence.JoinColumn;
12import javax.persistence.ManyToOne;
13import javax.persistence.OneToMany;
14
15@Entity
16public class TreeNode {
17    private TreeNode parent;
18    private int id;
19    private String name;
20    private Set<TreeNode> chilrens = new HashSet<TreeNode>();
21
22    @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
23    public Set<TreeNode> getChilrens() {
24        return chilrens;
25    }

26
27    public String getName() {
28        return name;
29    }

30
31    @Id
32    @GeneratedValue
33    public int getId() {
34        return id;
35    }

36
37    @ManyToOne
38    @JoinColumn(name = "parentId")
39    public TreeNode getParent() {
40        return parent;
41    }

42
43    public void setChilrens(Set<TreeNode> chilrens) {
44        this.chilrens = chilrens;
45    }

46
47    public void setName(String name) {
48        this.name = name;
49    }

50
51    public void setId(int id) {
52        this.id = id;
53    }

54
55    public void setParent(TreeNode parent) {
56        this.parent = parent;
57    }

58
59}

60
测试用例:
  1package com.bebig.hibernate.model;
  2
  3import org.hibernate.HibernateException;
  4import org.hibernate.Session;
  5import org.hibernate.SessionFactory;
  6
  7import org.hibernate.cfg.AnnotationConfiguration;
  8import org.hibernate.tool.hbm2ddl.SchemaExport;
  9import org.junit.AfterClass;
 10import org.junit.BeforeClass;
 11import org.junit.Test;
 12
 13public class hibernateTest {
 14    private static SessionFactory sessionFactory;
 15
 16    @BeforeClass
 17    public static void beforeClass() {
 18        new SchemaExport(new AnnotationConfiguration().configure()).create(
 19                falsetrue);
 20        try {
 21            sessionFactory = new AnnotationConfiguration().configure()
 22                    .buildSessionFactory();
 23        }
 catch (HibernateException e) {
 24            // TODO Auto-generated catch block
 25            e.printStackTrace();
 26        }

 27
 28    }

 29
 30    @Test
 31    public void testSchemaExport() {
 32        new SchemaExport(new AnnotationConfiguration().configure()).create(
 33                falsetrue);
 34
 35    }

 36
 37    @Test
 38    public void testSave() {
 39        TreeNode t = new TreeNode();
 40        t.setName("根结点");
 41        TreeNode t1 = new TreeNode();
 42        t1.setName("1结点");
 43        TreeNode t2 = new TreeNode();
 44        t2.setName("2结点");
 45        TreeNode t3 = new TreeNode();
 46        t3.setName("3结点");
 47        TreeNode t4 = new TreeNode();
 48        t4.setName("4结点");
 49
 50        t1.setParent(t);
 51        t2.setParent(t);
 52        t3.setParent(t1);
 53        t4.setParent(t2);
 54
 55        Session s = sessionFactory.getCurrentSession();
 56        s.beginTransaction();
 57
 58        s.save(t);
 59        s.save(t1);
 60        s.save(t2);
 61        s.save(t3);
 62        s.save(t4);
 63
 64        s.getTransaction().commit();
 65
 66    }

 67
 68    @Test
 69    public void testLoad() {
 70        testSave();
 71
 72        Session s = sessionFactory.getCurrentSession();
 73        s.beginTransaction();
 74        TreeNode t = (TreeNode) s.load(TreeNode.class1);
 75        print(t, 0);//递归打印出结点信息
 76
 77        s.getTransaction().commit();
 78
 79    }

 80
 81    private void print(TreeNode t, int level) {
 82        String space = "";
 83        for (int i = 0; i < level; i++{
 84            space += "----";
 85        }

 86
 87        System.out.println(space + t.getName());
 88        for (TreeNode n : t.getChilrens()) {
 89            print(n, level + 1);
 90        }

 91
 92    }

 93
 94    @Test
 95    public void testDelete() {
 96        testSave();
 97
 98        Session s = sessionFactory.getCurrentSession();
 99        s.beginTransaction();
100        TreeNode t = (TreeNode) s.load(TreeNode.class2);
101        s.delete(t);
102        s.getTransaction().commit();
103
104    }

105
106    @AfterClass
107    public static void afterClass() {
108        sessionFactory.close();
109    }

110
111    public static void main(String[] args) {
112        beforeClass();
113    }

114}

115