代码改变世界

Hibernate树形结构的关联映射

2012-06-12 17:55  功夫猫  阅读(314)  评论(0)    收藏  举报

一、帖子

  具有相同属性的同一类事物,称之为树形结构。如何用hibernate给树形结构建表呢。

id 属性 pid
1 - 0
2 - 1
3 - 2
4 - 2

  表格的id自动生成,pid为0的为主贴,pid为1的是id为1的跟帖。

  给出代码:

Type.calss
 1 @Entity
 2 @Table(name="t_type")
 3 public class Type {
 4     private int id;
 5     private String plot;
 6     private Type parant;
 7     private Set<Type> children = new HashSet<Type>();
 8     
 9     @Id
10     @GeneratedValue
11     public int getId() {
12         return id;
13     }
14     public void setId(int id) {
15         this.id = id;
16     }
17     public String getPlot() {
18         return plot;
19     }
20     public void setPlot(String plot) {
21         this.plot = plot;
22     }
23     @ManyToOne
24     @JoinColumn(name="pid")
25     public Type getParant() {
26         return parant;
27     }
28     public void setParant(Type parant) {
29         this.parant = parant;
30     }
31     @OneToMany(mappedBy="parant")
32     public Set<Type> getChildren() {
33         return children;
34     }
35     public void setChildren(Set<Type> children) {
36         this.children = children;
37     }

二、学生、课程、分数
  1、学生与课程的关系是n:n

  2、学生与分数的关系是1:n

  3、课程与分数的关系是1:n

Student.class
 1 package com.kebin.pojo;
 2 
 3 import java.util.Set;
 4 
 5 import javax.persistence.Entity;
 6 import javax.persistence.GeneratedValue;
 7 import javax.persistence.Id;
 8 import javax.persistence.JoinColumn;
 9 import javax.persistence.JoinTable;
10 import javax.persistence.ManyToMany;
11 import javax.persistence.Table;
12 
13 @Entity
14 @Table(name="t_student")
15 public class Student {
16     private int id;
17     private String name;
18     private Set<Course> course;
19 
20 
21     @Id
22     @GeneratedValue
23     public int getId() {
24         return id;
25     }
26     public void setId(int id) {
27         this.id = id;
28     }
29     public String getName() {
30         return name;
31     }
32     public void setName(String name) {
33         this.name = name;
34     }
35     @ManyToMany
36     @JoinTable(name="t_score",joinColumns={@JoinColumn(name="sid")},inverseJoinColumns={@JoinColumn(name="cid")})
37     public Set<Course> getCourse() {
38         return course;
39     }
40     public void setCourse(Set<Course> course) {
41         this.course = course;
42     }
43 
44 }
Course.class
 1 package com.kebin.pojo;
 2 
 3 import java.util.Set;
 4 
 5 import javax.persistence.Entity;
 6 import javax.persistence.GeneratedValue;
 7 import javax.persistence.Id;
 8 import javax.persistence.JoinColumn;
 9 import javax.persistence.JoinTable;
10 import javax.persistence.ManyToMany;
11 import javax.persistence.Table;
12 
13 @Entity
14 @Table(name="t_course")
15 public class Course {
16     private int id;
17     private String name;
18     private Set<Student> students;
19 
20     
21     @Id
22     @GeneratedValue
23     public int getId() {
24         return id;
25     }
26     public void setId(int id) {
27         this.id = id;
28     }
29     public String getName() {
30         return name;
31     }
32     public void setName(String name) {
33         this.name = name;
34     }
35     @ManyToMany
36     @JoinTable(name="t_score",joinColumns={@JoinColumn(name="cid")},inverseJoinColumns={@JoinColumn(name="sid")})
37     public Set<Student> getStudents() {
38         return students;
39     }
40     public void setStudents(Set<Student> students) {
41         this.students = students;
42     }
43 
44     
45 }
Score.class
package com.kebin.pojo;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="t_score")
public class Score {
    private int id;
    private int fenshu;
    
    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getFenshu() {
        return fenshu;
    }
    public void setFenshu(int fenshu) {
        this.fenshu = fenshu;
    }
    
}