Hibernate基础之十一:树状结构遍历

一:TreeNode

树结构的一个节点,

主键是ID,具体内容是value

双向连接俩外键,分别是父节点pid,和子节点的集合children

 

[java] view plaincopyprint?
  1. @Entity 
  2. @Table(name="t_TreeNode"
  3. publicclass TreeNode  
  4.     privateint id; 
  5.     private String value; 
  6.      
  7.     private TreeNode pid;//父节点id  
  8.     private Set<TreeNode> children = new HashSet<TreeNode>(); //子节点id  
  9.  
  10.  
  11.     @Id 
  12.     @GeneratedValue 
  13.     publicint getId() { 
  14.         return id; 
  15.     } 
  16.     @OneToMany(cascade=(CascadeType.ALL),mappedBy="pid")//级联用ALL  
  17.     public Set<TreeNode> getChildren() { 
  18.         return children; 
  19.     } 
  20.     @ManyToOne 
  21.     @JoinColumn(name="p_Id")//指定外键名称,不指定的默认值是group_Id  
  22.     public TreeNode getPid() { 
  23.         return pid; 
  24.     } 
  25.      
@Entity
@Table(name="t_TreeNode")
public class TreeNode 
{
	private int id;
	private String value;
	
	private TreeNode pid;//父节点id
	private Set<TreeNode> children = new HashSet<TreeNode>(); //子节点id


	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}
	@OneToMany(cascade=(CascadeType.ALL),mappedBy="pid")//级联用ALL
	public Set<TreeNode> getChildren() {
		return children;
	}
	@ManyToOne
	@JoinColumn(name="p_Id")//指定外键名称,不指定的默认值是group_Id
	public TreeNode getPid() {
		return pid;
	}
	

 

 

 

二:存储

设置双向的关联

 

[java] view plaincopyprint?
  1. @Test 
  2. publicvoid testIN() {   
  3.     Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 
  4.        session.beginTransaction(); 
  5.  
  6.        TreeNode root = new TreeNode(); 
  7.        root.setValue("root"); 
  8.         
  9.        TreeNode top1 = new TreeNode(); 
  10.        top1.setValue("top1"); 
  11.        TreeNode top2 = new TreeNode(); 
  12.        top2.setValue("top2"); 
  13.         
  14.        TreeNode sub1_1 = new TreeNode(); 
  15.        sub1_1.setValue("sub1_1"); 
  16.        TreeNode sub1_2 = new TreeNode(); 
  17.        sub1_2.setValue("sub1_2"); 
  18.         
  19.        root.getChildren().add(top1);//正向  
  20.        root.getChildren().add(top2); 
  21.        top1.getChildren().add(sub1_1); 
  22.        top1.getChildren().add(sub1_2); 
  23.         
  24.        sub1_1.setPid(top1);//反向  
  25.        sub1_2.setPid(top1); 
  26.        top1.setPid(root); 
  27.        top2.setPid(root); 
  28.           
  29.        session.save(root);//因为设置级联,所以存储g时候也把u1和u2存上了。  
  30.  
  31.        session.getTransaction().commit(); 
  32.        HibernateUtil.getSessionFactory().close();          
	@Test
	public void testIN() {	
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();

        TreeNode root = new TreeNode();
        root.setValue("root");
        
        TreeNode top1 = new TreeNode();
        top1.setValue("top1");
        TreeNode top2 = new TreeNode();
        top2.setValue("top2");
        
        TreeNode sub1_1 = new TreeNode();
        sub1_1.setValue("sub1_1");
        TreeNode sub1_2 = new TreeNode();
        sub1_2.setValue("sub1_2");
        
        root.getChildren().add(top1);//正向
        root.getChildren().add(top2);
        top1.getChildren().add(sub1_1);
        top1.getChildren().add(sub1_2);
        
        sub1_1.setPid(top1);//反向
        sub1_2.setPid(top1);
        top1.setPid(root);
        top2.setPid(root);
          
        session.save(root);//因为设置级联,所以存储g时候也把u1和u2存上了。

        session.getTransaction().commit();
        HibernateUtil.getSessionFactory().close();         
	}
	

 

 

 

三:遍历

递归遍历

 

[java] view plaincopyprint?
  1. @Test 
  2. publicvoid testOut() { 
  3.      
  4.     Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 
  5.        session.beginTransaction(); 
  6.         
  7.        TreeNode node = (TreeNode)session.get(TreeNode.class, 1); 
  8.        print(node); 
  9.  
  10.         
  11.        session.getTransaction().commit(); 
  12.        HibernateUtil.getSessionFactory().close(); 
  13.  
  14. publicvoid print(TreeNode n) 
  15.        System.out.println(n.getValue()); 
  16.        for(TreeNode child : n.getChildren()) 
  17.        { 
  18.         print(child); 
  19.        } 
	@Test
	public void testOut() {
		
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        
        TreeNode node = (TreeNode)session.get(TreeNode.class, 1);
        print(node);

        
        session.getTransaction().commit();
        HibernateUtil.getSessionFactory().close();
	}
	
	public void print(TreeNode n)
	{
        System.out.println(n.getValue());
        for(TreeNode child : n.getChildren())
        {
        	print(child);
        }
	}

posted on 2012-11-08 18:45  sslshopper  阅读(199)  评论(0)    收藏  举报

导航