Hibernate学习笔记_关系映射_树状结构练习

1         树状结构的设计(至关重要)

a) 在同—个类中使用One2Many和Many20ne

@Entity
public class Org {
    private int id;
    private String name;
    private Set<Org> children=new HashSet<Org>();
    private Org parent;
    @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(mappedBy="parent",cascade={CascadeType.ALL},fetch=FetchType.EAGER)
    public Set<Org> getChildren() {
        return children;
    }
    public void setChildren(Set<Org> children) {
        this.children = children;
    }
    @ManyToOne()
    @JoinColumn(name="parentID")
    public Org getParent() {
        return parent;
    }
    public void setParent(Org parent) {
        this.parent = parent;
    }
}
@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);
        o1.getChildren().add(o12);
        o11.setParent(o1);
        o12.setParent(o1);
        o1.setParent(o);
        o2.setParent(o);
                
        
        Session session = sessionFactory.openSession();
        session.beginTransaction();
        session.save(o);
    
        session.getTransaction().commit();
        session.close();
    }
    
    @Test
    public void testLoad() {
        testSave();
                
        
        Session session = sessionFactory.openSession();
        session.beginTransaction();
        Org org=(Org)session.load(Org.class, 1);
        
        print(org,0);
    
        session.getTransaction().commit();
        session.close();
    }

    private void print(Org org,int level) {
        String str="";
        for(int i=0;i<level;i++){
            str+="----";
        }
        System.out.println(str+org.getName());
        for (Org o:org.getChildren()){
            print(o,level+1);
        }
        
    }
原文地址:https://www.cnblogs.com/enjoy-life-clh/p/4146484.html