hibernate生成tree

这篇博客介绍了如何使用Hibernate框架来创建和管理树形结构的数据。通过定义一个`Tree`实体类,利用`@ManyToOne`和`@OneToMany`注解建立父子关系,并展示了如何插入和加载树形数据的代码示例。
http://www.iteye.com/topic/1129579

  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. }  

 生成的建表语句:

Xml代码  收藏代码
  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)  

 向树中插入数据:

Java代码  收藏代码
  1. @Test  
  2.     public void TestSaveTree(){  
  3.           
  4.         Session session=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.     }  

 结果:

 

 从树中取入数据代码:

Java代码  收藏代码
  1. @Test  
  2.     public void TestLoadTree(){  
  3.         Session session=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.         }  

 取出结果:



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值