Hibernate——树状映射

来源:互联网 发布:淘宝卖家违规价格优化 编辑:程序博客网 时间:2024/06/16 09:03

在同一个类中使用ManyToOne和OneToMany

@Entitypublic class Org {private int id;private String name;private Set<Org> children =new HashSet<Org>();private Org parent;@Id@GeneratedValuepublic 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="p_id")public Org getParent() {return parent;}public void setParent(Org parent) {this.parent = parent;}}
在子类太多的情况下FetchType还是设LAZY比较好



save树状映射

@Testpublic void testSave() {Org o = new Org();o.setName("father");Org o1 = new Org();o1.setName("son1");Org o2 = new Org();o2.setName("son2");Org o3 = new Org();o3.setName("grandson1");o.getChildren().add(o1);o.getChildren().add(o2);o1.getChildren().add(o3);o1.setParent(o);o2.setParent(o);o3.setParent(o1);Session s = sf.getCurrentSession();s.beginTransaction();s.save(o);s.getTransaction().commit();}


利用递归打印树状映射

@Testpublic void testGet(){testSave();Session s = sf.getCurrentSession();s.beginTransaction();Org o =(Org)s.get(Org.class, 1);print(o,0);s.getTransaction().commit();}private void print(Org o,int level) {String preStr = "";for(int i=0;i<level;i++){preStr +="----";}System.out.println(preStr+o.getName());for(Org child:o.getChildren()){print(child,level+1);}}


原创粉丝点击