1. package yingjun.model;
2.
3. import java.util.HashSet;
4. import java.util.Set;
5.
6. import javax.persistence.CascadeType;
7. import javax.persistence.Entity;
8. import javax.persistence.FetchType;
9. import javax.persistence.GeneratedValue;
10. import javax.persistence.Id;
11. import javax.persistence.JoinColumn;
12. import javax.persistence.ManyToOne;
13. import javax.persistence.OneToMany;
14.
15.
16. @Entity
17. public class Tree {
18. private int id;
19. private String name;
20. private Tree parent;
21. private Set<Tree> children=new HashSet<Tree>();
22. @Id
23. @GeneratedValue
24. public int getId() {
25. return id;
26. }
27. public void setId(int id) {
28. this.id = id;
29. }
30. public String getName() {
31. return name;
32. }
33. public void setName(String name) {
34. this.name = name;
35. }
36. @ManyToOne
37. @JoinColumn(name="parent_id")
38. public Tree getParent() {
39. return parent;
40. }
41. public void setParent(Tree parent) {
42. this.parent = parent;
43. }
44.
45. @OneToMany(mappedBy="parent",cascade=CascadeType.ALL,fetch=FetchType.EAGER)
46. public Set<Tree> getChildren() {
47. return children;
48. }
49. public void setChildren(Set<Tree> children) {
50. this.children = children;
51. }
52.
53.
54. }
生成的建表语句:
1. create table Tree (
2. id integer not null auto_increment,
3. name varchar(255),
4. parent_id integer,
5. primary key (id)
6. )
7.
8. alter table Tree
9. add index FK27E7BE9FD80F87 (parent_id),
10. add constraint FK27E7BE9FD80F87
11. foreign key (parent_id)
12. references Tree (id)
向树中插入数据:
1. @Test
2. public void TestSaveTree(){
3.
4. Session sessinotallow=HibernateUtil.getSessionFactory().getCurrentSession();
5. session.beginTransaction();
6. Tree tree1=new Tree();
7. tree1.setName("图片");
8.
9. Tree tree2=new Tree();
10. tree2.setName("照片");
11.
12. Tree tree3=new Tree();
13. tree3.setName("海报");
14.
15. Tree tree4=new Tree();
16. tree4.setName("我的照片1");
17.
18. Tree tree5=new Tree();
19. tree5.setName("我的照片2");
20.
21. tree1.getChildren().add(tree2);
22. tree1.getChildren().add(tree3);
23. tree2.getChildren().add(tree4);
24. tree2.getChildren().add(tree5);
25. tree2.setParent(tree1);
26. tree3.setParent(tree1);
27. tree4.setParent(tree2);
28. tree5.setParent(tree2);
29.
30. session.save(tree1);
31. session.getTransaction().commit();
32. }
结果:
从树中取入数据代码:
1. @Test
2. public void TestLoadTree(){
3. Session sessinotallow=HibernateUtil.getSessionFactory().getCurrentSession();
4. session.beginTransaction();
5. Tree t=(Tree)session.load(Tree.class, 1);
6. print(t);
7. session.getTransaction().commit();
8.
9.
10. }
11.
12. private void print(Tree tree) {
13. System.out.println(tree.getName());
14. for(Tree child: tree.getChildren()){
15. print(child);
16. }
取出结果: