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