美文网首页
多对多双向

多对多双向

作者: 打死你的小乌龟 | 来源:发表于2018-01-19 14:37 被阅读0次
说明:
关系操作
1.增加关系相当于在第三张表中插入一行数据
2.解除关系相当于在第三张表中删除一行数据
3.更新关系?
  先删除后增加
4.谁维护关系,效率都一样,看页面的需求
1、多对多的结构是三张表
2、多对多是类与集合的关系

映射文件

在更新课程的时候,级联更新学生

    @Test
    public void testUpdateCourse_Cascade_Update_Student(){
        Session session = sessionFactory.getCurrentSession();
        Transaction transaction =  session.beginTransaction();
        Course course = (Course)session.get(Course.class, 1L);
        //选修该课程的所有的学生
        Set<Student> students = course.getStudents();
        for (Student student : students) {
            student.setName("asfd");
        }
        transaction.commit();
    }
    
    /**
     * 解除课程1和所有的学生之间的关系
     *     delete 
                from
                    student_course 
                where
                    cid=?
               把第三张表中针对cid为1的数据全部删除了

     */
    @Test
    public void testRealseAllR(){
        Session session = sessionFactory.getCurrentSession();
        Transaction transaction =  session.beginTransaction();
        Course course = (Course)session.get(Course.class, 1L);
        course.setStudents(null);
        transaction.commit();
    }
    
    /**
     * 把学生1从课程1转到课程2
     *    Hibernate:   解除关系
            delete 
            from
                student_course 
            where
                sid=? 
                and cid=?
        Hibernate:    增加关系
            insert 
            into
                student_course
                (sid, cid) 
            values
                (?, ?)

     */
    @Test
    public void testStudentFromCourseToCourse(){
        Session session = sessionFactory.getCurrentSession();
        Transaction transaction =  session.beginTransaction();
        Student student = (Student)session.get(Student.class, 1L);
        Course course1 = (Course)session.get(Course.class, 1L);
        Course course2 = (Course)session.get(Course.class, 2L);
        student.getCourses().remove(course1);//解除关系
        student.getCourses().add(course2);//建立关系
        transaction.commit();
    }
    
    /**
     * 删除一个学生
     * Hibernate: 
            delete   解除关系
            from
                student_course 
            where
                sid=?
        Hibernate: 
            delete 删除学生
            from
                Student 
            where
                sid=?
     */
    @Test
    public void testDeleteStudent(){
        Session session = sessionFactory.getCurrentSession();
        Transaction transaction =  session.beginTransaction();
        Student student = (Student)session.get(Student.class, 1L);
        session.delete(student);
        transaction.commit();
    }

相关文章

  • 多对多双向

    说明: 1、多对多的结构是三张表 2、多对多是类与集合的关系 映射文件

  • 简单Java类之 一对多、 双向一对多、多对多

    一对多 双向一对多 多对多

  • 二、JPA 入门

    关联映射 一对多(多对一) 双向关联 多对多的双向关联 JPA 二级缓存的使用 (使用的 ehcache) 环境搭...

  • 关系的种类对于性能的影响

    一对多单向只有一个查询: 一对一双向同样只有一个查询: 多对一(维表为多端)双向,4个查询: 多对多双向,5个查询...

  • hibernate 多对多

    0.0 参数 class.catalog="指定数据库的,建议删掉" 1.0 简单多对多(双向多对多) 1.1添加...

  • Hibernate 菜鸟教程 6 双向多对多

    双向多对多inverse配置 如果关系两边都使用默认inverse=false配置,表示关系两边都可以管理中间表的...

  • JPA 菜鸟教程 7 双向多对多

    双向多对多的ddl语句 同单向多对多表的ddl语句一致 Student Teacher Many2ManyTest...

  • 多对多

    一、单向和双向 包括一对一,一对多,多对多这三种情况,但是每一种又分为单向和双向,在hibernate中我们就详细...

  • hibernate双向关联(一对多,多对一)

    hibernate默认配置双向关联时,删除一这边的时候,不会删除多那边,而是把多的那边的关联字段设置为null,刚...

  • 9.hibernate映射(多对多)

    多对多也是分为: 单向多对多 双向多对多 案例说明: 一个学生可以上多个班级的课,一个班级也可以有多个学生 先来看...

网友评论

      本文标题:多对多双向

      本文链接:https://www.haomeiwen.com/subject/zybooxtx.html