美文网首页
一对多的双向

一对多的双向

作者: 打死你的小乌龟 | 来源:发表于2018-01-19 14:15 被阅读0次

一对多指的是类与集合之间的关系
多对一指的是类与类之间的关系

one-to-many:一对多指的是类与集合之间的关系
映射文件的配置
many-to-one:多对一指的是类与类之间的关系
映射文件的配置

总结

  1、一般情况下,一对多,多的一方维护关系,效率比较高
  2、一对多,如果一的一方维护关系,实际上就是发出更新外键的update语句
  3、如果多的一方维护关系,实际上就是更新了student表的所有的字段
  4、一般情况下,Classes.hbm.xml文件中,针对set集合的invserse的值为true 不维护关系
@Test
public void testSaveStudent_Cascade_SaveClasses(){
    Session session = sessionFactory.getCurrentSession();
    Transaction transaction = session.beginTransaction();
        
        Student student = new Student();
        student.setName("哈哈");
        
        Classes classes = new Classes();
        classes.setName("嘿嘿");
        
        //建立学生与班级之间的关系
        student.setClasses(classes);
        
        session.save(student);
        transaction.commit();
    }
在更新学生的时候,保存班级
    
@Test
public void testUpdateStudent_Cascade_SaveClasses(){
        Session session = sessionFactory.getCurrentSession();
        Transaction transaction = session.beginTransaction();
        
        Student student = (Student)session.get(Student.class, 3L);
        
        Classes classes = new Classes();
        classes.setName("asdf");
        
        //建立学生与班级之间的关系
        student.setClasses(classes);
    
        transaction.commit();
    }

 已经存在一个班级,已经存在一个学生,让该学生加入到该班级
     
    
    @Test
    public void testBuildR(){
        Session session = sessionFactory.getCurrentSession();
        Transaction transaction = session.beginTransaction();
        Student student = (Student)session.get(Student.class, 3L);
        Classes classes = (Classes)session.get(Classes.class, 5L);
        //建立学生和班级之间的关系
        student.setClasses(classes);
        transaction.commit();
    }

把sid为1的学生从cid为5的班级转到3的班级

    @Test
    public void testTransform(){
        Session session = sessionFactory.getCurrentSession();
        Transaction transaction = session.beginTransaction();
        Classes classes = (Classes)session.get(Classes.class, 3L);
        Student student = (Student)session.get(Student.class, 1L);
        //建立关系
        student.setClasses(classes);
        transaction.commit();
    }
    
 解除一个班级和所有的学生之间的关系

    @Test
    public void testRealseAllR(){
        Session session = sessionFactory.getCurrentSession();
        Transaction transaction = session.beginTransaction();
        //提取cid为3的班级
        Classes classes = (Classes)session.get(Classes.class, 3L);
        Set<Student> students = classes.getStudents();

        for (Student student : students) {
            student.setClasses(null);
        }
        transaction.commit();
    }

相关文章

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

    一对多 双向一对多 多对多

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

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

  • 一对多的双向

    一对多指的是类与集合之间的关系多对一指的是类与类之间的关系 one-to-many:一对多指的是类与集合之间的关系...

  • 二、JPA 入门

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

  • 多对多

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

  • Hibernate9-Hibernate一对一外键&一对

    一对一外键双向关联 注:一对一外键双向关联是一对多外键关联的特例,只是在多的一方加了一个唯一性约束。USERS1表...

  • JPA 菜鸟教程 5 双向一对多

    双向一对多的ddl语句 同单向多对一,单向一对多表的ddl语句一致 Product ProductType One...

  • 7. MyBatis 多表查询

    实现Role 到User 多对多,使用Mybatis 实现一对多关系的维护。多对多关系其实我们看成是双向的一对多关...

  • 8.hibernate映射(一对多)

    一对多也是分为两种: 单向一对多 双向一对多 先来看一下公用的实体类 classes实体类 student实体类(...

  • Hibernate(七)双向一对多

    一、概述 双向 1-n 与 双向 n-1 是完全相同的两种情形 双向 1-n 需要在 1 的一端可以访问 n 的一...

网友评论

      本文标题:一对多的双向

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