首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate3.5 Annotation Many2Many双向投射配置

2012-10-07 
Hibernate3.5 Annotation Many2Many双向映射配置通常每个事实联接且仅联接到一个维度成员,而一个维度成员

Hibernate3.5 Annotation Many2Many双向映射配置
   通常每个事实联接且仅联接到一个维度成员,而一个维度成员可以与许多不同的事实相关联。例如,每个客户可以具有很多订单,但每个订单只属于一个客户。在关系数据库术语中,这称为“一对多关系”。但有时一个事实可联接多个维度成员。在关系数据库术语中,这称为“多对多关系”。例如,一个客户进行采购的原因可以有多个,而一个采购原因可以与多个采购相关联。联接表用于定义与每个采购相关的销售原因。在由此类关系构建的 Sales Reason 维度中,将有多个成员与一个销售事务相关联。多对多维度可将维度模型扩展到经典星型架构范围之外,并在维度不直接与事实数据表相关联的情况下支持复杂分析。
  下面就用学生和老师的关系来说明下,一个学生可以对应多个老师,而一个老师同时也可以教很多学生,这就是一个多对多的关系,映射多对多的关系通常要第三张表在存储二者的关系,在又向的多对多映射中,学生会持有一个老师的集合,表明学生的老师有哪些;老师也会持有学生的一个集合,表明老师所教的学生有哪些。
代码如下:

package fantasy0707.hibernate.model;import java.util.HashSet;import java.util.Set;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.ManyToMany;import javax.persistence.ManyToOne;@Entitypublic class Student {private int id;private String name;private Set<Teacher> teachers = new HashSet<Teacher>();@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;}@ManyToMany(mappedBy="students")public Set<Teacher> getTeachers() {return teachers;}public void setTeachers(Set<Teacher> teachers) {this.teachers = teachers;}}



package fantasy0707.hibernate.model;import java.util.HashSet;import java.util.Set;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.JoinTable;import javax.persistence.ManyToMany;@Entitypublic class Teacher {private int id;private String name;private Set<Student> students = new HashSet<Student>();@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;}@ManyToMany@JoinTable(        name="t_s",        joinColumns=@JoinColumn(name="t_id"),        inverseJoinColumns=@JoinColumn(name="s_id")    )public Set<Student> getStudents() {return students;}public void setStudents(Set<Student> students) {this.students = students;}}


会生成的表有student,teacher,t_s,其中t_s的结构如下:

+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| t_id  | int(11) | NO   | PRI | NULL    |       |
| s_id  | int(11) | NO   | PRI | NULL    |       |
+-------+---------+------+-----+---------+-------+

(老手就不要看了,新手参考就成)
1 楼 一对沙 2011-10-28   谢谢分享,学习了

热点排行