02多对多关联关系.doc

上传人:公**** 文档编号:557489831 上传时间:2023-12-06 格式:DOC 页数:4 大小:43.01KB
返回 下载 相关 举报
02多对多关联关系.doc_第1页
第1页 / 共4页
02多对多关联关系.doc_第2页
第2页 / 共4页
02多对多关联关系.doc_第3页
第3页 / 共4页
02多对多关联关系.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《02多对多关联关系.doc》由会员分享,可在线阅读,更多相关《02多对多关联关系.doc(4页珍藏版)》请在金锄头文库上搜索。

1、数据库中的多对多关联关系反映在这种情况下:比如说,一个学生上多门课,一门课有多个学生学习。这就是多对多关联。那么从数据库的角度,我们如何来设计数据库表结构以实现多对多的关联关系呢?如果设计成下面的样子;studentidnamecourse_id1罗锅2courseidnamestudent_id2Java1上面的表结构设计的不合理hibernate会使用一个中间关联表来优化表设计结构:student_coursestudent_idcourse_id12将学生id和课程id联合作为主键。首先来设计POJO类 Student类:id name Set类型的属性courses Course类:i

2、d name Set 类型的属性students上面的类均生成Getter和Setter方法接下来,我们设计映射文件:Student.hbm.xml 要从学生查他学的所有课程,需要将学生的id与student_course表中的key属性指定的student_id列关联,找到所有记录后,要将这些记录的course_id作为外键到课程表中查询相关联的课程记录。这里实际上使用了一对多的关联查询Course.hbm.xml 接下来我们编写一个测试代码,插入两条学生两条课程记录static void add()Session s = null;Transaction tx = null;try Stu

3、dent s1 = new Student();s1.setName(student1);Student s2 = new Student();s2.setName(student2);Course c1 = new Course();c1.setName(Java);Course c2 = new Course();c2.setName(C#);s = HibernateUtil.getSession();tx = s.beginTransaction();s.save(s1);s.save(s2);s.save(c1);s.save(c2);mit(); catch (HibernateE

4、xception e) if (tx != null) tx.rollback();throw e; finally if (s != null) s.close();这个时候我们发现数据都插入到数据库中去了,但是我们发现一个问题,student_course表中没有记录,也就是说student和course表没有关联起来。建立对象之间的关联修改上面的代码:添加下面的代码:Set ss = new HashSet();ss.add(s1);ss.add(s2);Set cs = new HashSet();cs.add(c1);cs.add(c2);s1.setCourses(cs);s2.s

5、etCourses(cs);再次执行就会在student_course表中生成四条记录,不可以再写如下代码:/c1.setStudents(ss);/c2.setStudents(ss);违反了student_course表中的主键约束(主键不可重复)接下来我们看看多对多关联的检索static void getCoursesbyStudentId(int id) Session s = null;try s = HibernateUtil.getSession();Student stu = (Student)s.get(Student.class, id);System.out.printl

6、n(stu.getCourses().size(); finally if (s != null) s.close();会发现hibernate底层生成的sql语句如下:Hibernate: select student0_.id as id3_0_, student0_.name as name3_0_ from Student student0_ where student0_.id=?Hibernate: select courses0_.student_id as student1_3_1_, courses0_.course_id as course2_1_, course1_.id as id5_0_, course1_.name as name5_0_ from student_course courses0_ inner join Course course1_ on courses0_.course_id=course1_.id where courses0_.student_id=?这里涉及到多表查询,效率会很低的,一般不推荐在这种多对多的关联关系下一次性把关联的记录全都加载进来。一对多也用的很少,一般会采用多对一的关联关系。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号