多对多关联关系:本质上就是两个一对多的关系,
例如:一个学生可以选择多门课程。一门课程可以被很多学生选择。
体现在代码中如下;学生类:
- <span style="white-space: pre;"> </span>private String id;//学生id
- private String name;//学生姓名
- private Set<Course> course;//学生选择的课程集合
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Set<Course> getCourse() {
- return course;
- }
- public void setCourse(Set<Course> course) {
- this.course = course;
- }
- <span style="white-space: pre;"> </span>private String id;//课程id
- private String name;//课程名称
- private Set<Student> student;//学生集合
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Set<Student> getStudent() {
- return student;
- }
- public void setStudent(Set<Student> student) {
- this.student = student;
- }
student.hbm.xml映射文件
- <span style="white-space: pre;"> </span><class name="com.test.bean1.Student" table="student">
- <id name="id" column="id" type="string">
- <generator class="uuid"/>
- </id>
- <property name="name" column="name" type="string"/>
- <set name="course" table="student_course" cascade="save-update" >
- <key column="student_id"/><!-- 这个student_id是中间关联表的id,根据这个id可以关联到student表 -->
- <!-- class:表示关联的类型。column:表示根据course_id可以关联到course表 -->
- <many-to-many class="com.test.bean1.Course" column="course_id" />
- </set>
- </class>
- <class name="com.test.bean1.Course" table="course">
- <id name="id" column="id" type="string">
- <generator class="uuid"/>
- </id>
- <property name="name" column="name" type="string"/>
- <!-- 这里的配置和上面的一样,有一点就是inverse为true;表示对方维护这种关联关系。为false:表示主动方;由主动方维护这种关联关系 -->
- <set name="student" table="student_course" cascade="save-update" inverse="true" >
- <key column="course_id"/>
- <many-to-many class="com.test.bean1.Student" column="student_id" />
- </set>
- </class>
- Session session=sessionfactory.openSession();
- Transaction tx=null;
- // Student student=new Student();
- // student.setName("zhangsan");
- // student.setCourse(new HashSet<Course>());
- //
- // Course course=new Course();
- // course.setName("英语");
- // course.setStudent(new HashSet<Student>());
- // //添加记录
- // student.getCourse().add(course);
- // course.getStudent().add(student);
- //
- try {
- tx=session.beginTransaction();
- //查询到张三学生。没用延迟加载。所以把对应的课程表的信息也查出来了。
- Student student=(Student)session.get(Student.class, "4028ab81385bdd9b01385bdd9d030001");
- //查询到数学这门课程
- // Course course=(Course)session.get(Course.class, "4028ab81385be0c001385be0c2db0002");
- //删除信息
- // student.getCourse().remove(course);
- //已经查询到了张三的信息。和数学课程的信息。所以可以讲数学这门课程让张三选中
- // student.getCourse().add(course);
- // course.getStudent().add(student);
- //遍历张三学生的所选课程
- Set<Course> course=student.getCourse();
- for(Iterator<Course> iter=course.iterator();iter.hasNext();){
- System.out.println(iter.next().getName());
- }
- tx.commit();
- } catch (Exception e) {
- if(null!=tx)
- tx.rollback();
- e.printStackTrace();
- }finally{
- session.close();
- }