多对多的关系操作
来源:互联网 发布:余弦相似度公式 python 编辑:程序博客网 时间:2024/06/11 18:33
把表建好了之后,我们来进行多对多的关系操作。
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、2、3的课程中 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 (?, ?)
- thinkphp的多对多关系操作
- 多对多的关系操作
- 一个双实体多对多关系的操作
- django 多对多关系的操作 包含映射表
- Hibernate中的表的多对多关系及操作
- hibernate03 关系操作 多对多
- Hibernate操作多对多关系
- hibernate多对多关系操作
- JDBC上关于数据库中多表操作一对多关系和多对多关系的实现方法
- JDBC上关于数据库中多表操作一对多关系和多对多关系的实现方法
- 【SSH三大框架】Hibernate基础第八篇:多对多关联关系的操作
- EF Codefirst 多对多关系 操作中间表的 增删改查(CRUD)
- Django数据库操作中的多对多关系
- hibernate02 关系操作 多对一单向双向
- 关系数据库—多对多的关系
- Hibernate之多对多关系之间的关系映射
- 多对多关系
- 多对多关系
- 第三方后台管理
- Linux TCP/IP通讯建立
- NDK开发之字符串操作
- HDU——2104 hide handkerchief
- 嵌入式linux之DMA驱动
- 多对多的关系操作
- 关于Java中基于名字重用的几种形式的区别(覆写、隐藏、重载、遮蔽、遮掩)
- 步骤条的实现原理及AliceUI中步骤条Step的应用
- 实施 ORM 的两项要旨:泛型和反射
- 18.策略模式
- RVO和NRVO
- PHP循环遍历倒金字塔
- 数字在排序数组中出现的次数
- iOS 文本与图片表情混排的实现