hibernate映射应用 - 树状结构

来源:互联网 发布:淘宝客服分流权重值 编辑:程序博客网 时间:2024/06/04 18:37
@Entity@Table(name = "t_node")public class Node {private int id;private String name;private Node parent;private Set<Node> childs = new HashSet<Node>();@Id@GeneratedValuepublic int getId() {return id;}@ManyToOne(cascade={CascadeType.ALL})@JoinColumn(name="pId")public Node getParent() {return parent;}@OneToMany(mappedBy="parent",cascade={CascadeType.ALL},fetch=FetchType.EAGER)public Set<Node> getChilds() {return childs;}public void setId(int id) {this.id = id;}public void setParent(Node parent) {this.parent = parent;}public void setChilds(Set<Node> childs) {this.childs = childs;}public String getName() {return name;}public void setName(String name) {this.name = name;}}
测试代码:public class NodeTest {private static SessionFactory sessionFactory = null;@BeforeClasspublic static void beforeClass(){sessionFactory = new Configuration().configure().buildSessionFactory();}@Testpublic void testSaveNode(){Session session = sessionFactory.getCurrentSession();session.beginTransaction();Node n = new Node();n.setName("root");Node n1 = new Node();n1.setName("n1");Node n2 = new Node();n2.setName("n2");Node n3 = new Node();n3.setName("n3");n.getChilds().add(n1);n.getChilds().add(n2);n2.getChilds().add(n3);n.setParent(null);n1.setParent(n);n2.setParent(n);n3.setParent(n2);session.save(n);session.getTransaction().commit();}@Testpublic void testLoadNode(){Session session = sessionFactory.getCurrentSession();session.beginTransaction();Node n = (Node)session.load(Node.class, 1);printNode(n, 0);session.getTransaction().commit();}public void printNode(Node node, int level){String preStr = "";for (int i = 0; i < level; i++) {preStr += "----";}System.out.println(preStr + node.getName());for (Node n : node.getChilds()) {printNode(n, level + 1);}}}
运行结果:root----n1----n2--------n3