多对多的关系操作

把表建好了之后,我们来进行多对多的关系操作。

public void saveStudent_cascade_Course(){
        Session session=sessionFactory.openSession();
        Transaction transaction=session.beginTransaction();

        Student student=new Student();
        student.setSname("ansel");
        student.setSdescription("nice");

        Course course=new Course();
        course.setCdescription("exciting");
        course.setCname("PE");

        Set<Course> courses=new HashSet<Course>();
        courses.add(course);
        student.setCourses(courses);

        /**
         * 注意:这里是保存的student,因为我们在上面设置的是student的属性,
            要找准,如果在这里找错了,就直接保存到save里面的对象,剩下的表会没有内容的
         */

        session.save(student);

        transaction.commit();
        session.close();
    }

运行之后,三张表都增加了数据:
course:
这里写图片描述

student:
这里写图片描述

student_course:
这里写图片描述


E:把一个课程,更改为另外一个课程:

    public void transferCourse(){
        Session session=sessionFactory.openSession();
        Transaction transaction=session.beginTransaction();
        //获取到学生
        Student student=(Student)session.get(Student.class, 1L);
        //获取到要更改的课程
        Course course=(Course)session.get(Course.class, 1L);
        //把要更改的课程移除
        student.getCourses().remove(course);
        //获取目标课程
        Course course2=(Course)session.get(Course.class, 2L);
        //添加目标课程
        student.getCourses().add(course2);

        transaction.commit();
        session.close();
    }

由于我自己添加了一些课程,在这里没有把代码展示出来
结果如图
这里写图片描述


把一个学生加入到一些课程中:

    public void testSaveStudent_cascade_Course(){
        //把一个学生添加到id1、23的课程中
        Session session=sessionFactory.openSession();
        Transaction transaction=session.beginTransaction();
        //得到学生
        Student student=(Student) session.get(Student.class, 3L);
        //得到123课程的集合,这里使用的是hql语句,注意是从pojo类中找
        List<Course> courses=session.createQuery("from Course where cid in (1,2,3)").list();
        //设置学生的课程,这个学生可能原来有课程
        student.getCourses().addAll(courses);
        transaction.commit();
        session.close();
    }

操作结果为:
这里写图片描述

Hibernate: select student0_.sid as sid2_0_, student0_.sdescription as sdescrip2_2_0_, student0_.sname as sname2_0_ from Student student0_ where student0_.sid=?
Hibernate: select course0_.cid as cid0_, course0_.cname as cname0_, course0_.cdescription as cdescrip3_0_ from Course course0_ where course0_.cid in (1 , 2 , 3)
Hibernate: select courses0_.sid as sid2_1_, courses0_.cid as cid1_, course1_.cid as cid0_0_, course1_.cname as cname0_0_, course1_.cdescription as cdescrip3_0_0_ from student_course courses0_ inner join Course course1_ on courses0_.cid=course1_.cid where courses0_.sid=?
Hibernate: insert into student_course (sid, cid) values (?, ?)
Hibernate: insert into student_course (sid, cid) values (?, ?)
Hibernate: insert into student_course (sid, cid) values (?, ?)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值