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;

@Entity
public class Student {

	private int id;
	
	private String name;
	
	private Set<Teacher> teachers = new HashSet<Teacher>();
	
	@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;
	}

	@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;

@Entity
public class Teacher {
	
	private int id;
	
	private String name;
	
	private Set<Student> students = new HashSet<Student>();

	@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;
	}

	@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    |       |
+-------+---------+------+-----+---------+-------+

(老手就不要看了,新手参考就成)

你可能感兴趣的:(数据结构,Hibernate)