Hibernate 多对多映射

package com.entity.manytomany;

import java.util.List;

import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;

import com.entity.BaseEntity;
@Entity
public class Student extends BaseEntity{
	private String name;
	@ManyToMany
	//学生是不稳定的一方 所以由学生来维护
	@JoinTable(name="student_course",
				joinColumns=@JoinColumn(name="s_id"),
				inverseJoinColumns=@JoinColumn(name="c_id"))
	//关联表的表名
	//关联当前表的主键
	//关联对方表的主键   ()内的name即关联表内的字段名   可以自己自由设计
	private List<Course> courses;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public List<Course> getCourses() {
		return courses;
	}
	public void setCourses(List<Course> courses) {
		this.courses = courses;
	}
	
	
}

student.java

package com.entity.manytomany;

import java.util.List;

import javax.persistence.Entity;
import javax.persistence.ManyToMany;

import com.entity.BaseEntity;
@Entity
public class Course extends BaseEntity{
	private String name;
	@ManyToMany(mappedBy ="courses")
	//被学生类的courses对象维护
	private List<Student> students;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public List<Student> getStudents() {
		return students;
	}
	public void setStudents(List<Student> students) {
		this.students = students;
	}
	
}

 Course.java

 

package com;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.entity.manytomany.Course;
import com.entity.manytomany.Student;

public class TestManyToMany {
	private Session s;
	private Transaction tran;
@Before
public void before(){
	s=HibernateUtils.getSession();
	tran=s.beginTransaction();
	
}

public void manytomany(){
	Course c1=new Course();
	Course c2=new Course();
	Course c3=new Course();
	Student stu1=new Student();
	Student stu2=new Student();
	Student stu3=new Student();
	stu1.setName("zhangsan");
	stu2.setName("lisi");
	stu3.setName("wangwu");
	c1.setName("java");
	c2.setName("oracle");
	c3.setName("html");
	//新建对象
	List<Course> courses =new ArrayList<Course>();//建立了一个课程集合
	List<Course> courses1 =new ArrayList<Course>();
	courses1.add(c2);
	courses1.add(c3);
	courses.add(c1);
	courses.add(c2);
	courses.add(c3);
	//向集合中插入要选的课程
	stu1.setCourses(courses);
	stu2.setCourses(courses);
	stu3.setCourses(courses1);
	//建立关联   将课程集合set到学生的课程属性中   即学生选择了集合中所有的课程
	s.save(c1);
	s.save(c2);
	s.save(c3);
	s.save(stu1);
	s.save(stu2);
	s.save(stu3);
}	
@Test
public void manytomanyquery(){
	Course c=(Course)s.get(Course.class, 1);
	for(Student s:c.getStudents()){
		System.out.println(c.getName()+"-------选这门课的学生"+s.getName());
	}
	Course c1=(Course)s.get(Course.class, 2);
	for(Student s:c1.getStudents()){
		System.out.println(c1.getName()+"-------选这门课的学生"+s.getName());
	}
	Course c2=(Course)s.get(Course.class, 3);
	for(Student s:c2.getStudents()){
		System.out.println(c1.getName()+"-------选这门课的学生"+s.getName());
	}
}
@After
public void after(){
	tran.commit();
	s.close();
}
}

 testmanytomany.java

posted @ 2014-10-13 19:10  马赛克都挡不住  阅读(310)  评论(0编辑  收藏  举报