Hibernate多对多关联

多对多关联:

示例:Teacher和Student,一个Teacher可以教很多student,一个Student也可以被很多teacher教

 

多对多单向关联

Teacher知道自己教了哪些学生,Student不知道教自己的有哪些老师

在Teacher中建(Set集合形式的)Student对象,并添加@ManyToMany注解

1.建Teacher实体类和Student实体类,添加Annotation注解,如下

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

 

@Entity
public class Student {
	private int id;
	private String name;

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

2.在hibernate.cfg.xml中添加mapping语句

<mapping class="com.hibernate.model.Teacher"/>
<mapping class="com.hibernate.model.Student"/>

3.建Junit测试类

public class ORMappingTest {
	
	@Test
	public void test() {	
		new SchemaExport(new Configuration().configure()).create(true, true);		
	}
}

程序至此结束,运行程序,在数据库中生成表teacher、表student以及中间表teacher_student(默认名)。

中间表teacher_student中会自动生成属性名为Teacher_id和students_id的两个外键,

可用@JoinTable注解修改中间表的名字及其属性名,如下:

@ManyToMany
@JoinTable(name="t_s",
           joinColumns={@JoinColumn(name="t_id")},
	    inverseJoinColumns={@JoinColumn(name="s_id")}
)
public Set<Student> getStudents() {
	return students;
}

这样会在数据库中生成名为t_s的中间表,表中有属性名为t_id和s_id的两个外键。

 

多对多双向关联

Teacher知道自己教了哪些学生,Student也知道教自己的有哪些老师

在Teacher中建(Set集合形式的)Student对象,在Student中建(Set集合形式的)Teacher对象,并添加@ManyToMany注解

1.建Teacher实体类和Student实体类,添加Annotation注解

Teacher类,同上

Student类,如下:

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

 

2.在hibernate.cfg.xml中添加mapping语句----同上

3.建Junit测试类----同上

 

程序至此结束,运行程序,在数据库中生成表teacher、表student以及中间表teacher_student(默认名)。

中间表teacher_student中会自动生成属性名为Teacher_id和students_id的两个外键,

可用@JoinTable注解修改中间表的名字及其属性名,

这样会在数据库中生成名为t_s的中间表,表中有属性名为t_id和s_id的两个外键。

Hibernate多对多关联,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。