Hibernate中的表的多对多关系及操作
来源:互联网 发布:散打 知乎 编辑:程序博客网 时间:2024/05/07 17:49
表的多对多关系及操作
多对多的表关系表达
表:
使用中间表,分别引用两方的ID
对象:
两方都使用集合表达
配置:
<set name="courses" table="t_student_course" >
<key column="sid" ></key>
<many-to-many class="Course" column="cid" ></many-to-many>
</set>
操作:
inverse: 我是否要放弃维护外键关系
cascade: 是否需要级联操作 (5个)
注意: 配置级联删除时,要小心,双方都配置级联删除, 任意删除一条记录, 整个关系链数据都会被删除.
使用中间表,分别引用两方的ID
对象:
两方都使用集合表达
配置:
<set name="courses" table="t_student_course" >
<key column="sid" ></key>
<many-to-many class="Course" column="cid" ></many-to-many>
</set>
操作:
inverse: 我是否要放弃维护外键关系
cascade: 是否需要级联操作 (5个)
注意: 配置级联删除时,要小心,双方都配置级联删除, 任意删除一条记录, 整个关系链数据都会被删除.
多对多的对象关系表达
配置:
Student:
package com.itheima.domain;import java.util.HashSet;import java.util.Set;public class Student {private Integer id;private String name;private Set<Course> courses = new HashSet<Course>();public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Set<Course> getCourses() {return courses;}public void setCourses(Set<Course> courses) {this.courses = courses;}}
Course:
package com.itheima.domain;import java.util.HashSet;import java.util.Set;public class Course {private Integer id;private String name;private Set<Student> students = new HashSet<Student>();public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Set<Student> getStudents() {return students;}public void setStudents(Set<Student> students) {this.students = students;}}
Student.hbm.xml:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!-- ORM元数据 表对象关系映射文件 package : 配置该配置文件中类所在的包. --> <hibernate-mapping package="com.itheima.domain" > <class name="Student" table="t_student" ><id name="id" column="id" ><generator class="native"></generator></id> <property name="name" column="name" ></property><!-- 多对多关系 --><!-- set 表达集合name: 集合的属性名table:多对多中间表的表名key 表达外键column:引用我的外键名many-to-many 表达多对多class : 集合引用方的类型column:对方在中间表的外键名 --><set name="courses" table="t_student_course" inverse="false" cascade="save-update" ><key column="sid" ></key><many-to-many class="Course" column="cid" ></many-to-many></set> </class> </hibernate-mapping>
Course.hbm.xml:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!-- ORM元数据 表对象关系映射文件 package : 配置该配置文件中类所在的包. --> <hibernate-mapping package="com.itheima.domain" > <class name="Course" table="t_course" ><id name="id" column="id" ><generator class="native"></generator></id> <property name="name" column="name" ></property><set name="students" table="t_student_course" inverse="true" ><key column="cid" ></key><many-to-many class="Student" column="sid" ></many-to-many></set> </class> </hibernate-mapping>
操作:
package com.itheima.a_manytomany;import org.hibernate.Session;import org.junit.Test;import com.itheima.domain.Course;import com.itheima.domain.Student;import com.itheima.utils.HibernateUtils;public class Demo {@Test//保存学生 => 通过学生保存课程. 由学生维护外键//Student 的//inverse = false//cascade = save-update//Course//inverse = truepublic void fun1(){Session session = HibernateUtils.openSession();session.beginTransaction();//------------------------------------------------Student stu1 = new Student();stu1.setName("tom");Student stu2 = new Student();stu2.setName("jerry");Course c1 = new Course();c1.setName("Struts2");Course c2 = new Course();c2.setName("Hibernate");Course c3 = new Course();c3.setName("Spring");stu1.getCourses().add(c1); //维护关系,级联保存stu1.getCourses().add(c2);stu1.getCourses().add(c3);stu2.getCourses().add(c1);stu2.getCourses().add(c2);stu2.getCourses().add(c3);session.save(stu1);session.save(stu2);//------------------------------------------------session.getTransaction().commit();session.close(); // 游离状态}}
0 0
- Hibernate中的表的多对多关系及操作
- Hibernate操作多对多关系
- hibernate多对多关系操作
- hibernate中的多对一关联关系
- hibernate中的多对一关联关系
- hibernate之表关系中的多对多
- Hibernate.isInitialized方法的使用(表是使用多对多映射关系实例中的表):
- Hibernate中的多对一和多对多关系
- Java 框架之Hibernate (三、Hibernate一对多及多对多的关系分析)
- Hibernate的多对多关联关系
- Hibernate的关系映射多对多
- hibernate实现多对多的关系
- Hibernate,多对多的关联关系
- hibernate单边的多对多关系
- hibernate双边的多对多关系
- Hibernate多对多的关系
- Hibernate的多对多关联关系
- hibernate的映射关系之一对多
- C语言实验——找中间数 (sdut oj)
- php支付宝接口用法
- Master-Mind Hints(UVa 340)
- Oracle的悲观锁和乐观锁
- mysql主从同步
- Hibernate中的表的多对多关系及操作
- spring 五个事务隔离级别和七个事务传播行为
- 《JS高程(3)》BOM-04(screen)-第8章笔记(09)
- oracle中的伪列和伪表
- USBService源码分析之Usb权限(二)
- A Practical Introduction to Deep Learning with Caffe
- 获取一段时间内的分割天数list
- 背包问题2
- 算法之路二:刘汝佳算法竞赛入门经典 3.7回文词 UVa401