http://www.iteye.com/topic/1129579
- package yingjun.model;
- import java.util.HashSet;
- import java.util.Set;
- import javax.persistence.CascadeType;
- import javax.persistence.Entity;
- import javax.persistence.FetchType;
- import javax.persistence.GeneratedValue;
- import javax.persistence.Id;
- import javax.persistence.JoinColumn;
- import javax.persistence.ManyToOne;
- import javax.persistence.OneToMany;
- @Entity
- public class Tree {
- private int id;
- private String name;
- private Tree parent;
- private Set<Tree> children=new HashSet<Tree>();
- @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;
- }
- @ManyToOne
- @JoinColumn(name="parent_id")
- public Tree getParent() {
- return parent;
- }
- public void setParent(Tree parent) {
- this.parent = parent;
- }
- @OneToMany(mappedBy="parent",cascade=CascadeType.ALL,fetch=FetchType.EAGER)
- public Set<Tree> getChildren() {
- return children;
- }
- public void setChildren(Set<Tree> children) {
- this.children = children;
- }
- }
生成的建表语句:
- create table Tree (
- id integer not null auto_increment,
- name varchar(255),
- parent_id integer,
- primary key (id)
- )
- alter table Tree
- add index FK27E7BE9FD80F87 (parent_id),
- add constraint FK27E7BE9FD80F87
- foreign key (parent_id)
- references Tree (id)
向树中插入数据:
- @Test
- public void TestSaveTree(){
- Session session=HibernateUtil.getSessionFactory().getCurrentSession();
- session.beginTransaction();
- Tree tree1=new Tree();
- tree1.setName("图片");
- Tree tree2=new Tree();
- tree2.setName("照片");
- Tree tree3=new Tree();
- tree3.setName("海报");
- Tree tree4=new Tree();
- tree4.setName("我的照片1");
- Tree tree5=new Tree();
- tree5.setName("我的照片2");
- tree1.getChildren().add(tree2);
- tree1.getChildren().add(tree3);
- tree2.getChildren().add(tree4);
- tree2.getChildren().add(tree5);
- tree2.setParent(tree1);
- tree3.setParent(tree1);
- tree4.setParent(tree2);
- tree5.setParent(tree2);
- session.save(tree1);
- session.getTransaction().commit();
- }
结果:
从树中取入数据代码:
- @Test
- public void TestLoadTree(){
- Session session=HibernateUtil.getSessionFactory().getCurrentSession();
- session.beginTransaction();
- Tree t=(Tree)session.load(Tree.class, 1);
- print(t);
- session.getTransaction().commit();
- }
- private void print(Tree tree) {
- System.out.println(tree.getName());
- for(Tree child: tree.getChildren()){
- print(child);
- }
取出结果: