技术分析之Hibernate的关联关系映射之多对多映射
来源:互联网 发布:java 神经网络框架 编辑:程序博客网 时间:2024/06/05 08:27
多对多的表映射关系可以相当于是老师和学生,一个老师可以有多个学生,一个学生也可以有多个老师,下面是学生老师表的配置和代码
Student类
package pojo;import java.util.HashSet;import java.util.Set;public class Student {//sid sname sgender private Long sid;private String sname;private String sgender;//集合Teacherprivate Set<Teacher>teachers=new HashSet<>();public Long getSid() {return sid;}public void setSid(Long sid) {this.sid = sid;}public String getSname() {return sname;}public void setSname(String sname) {this.sname = sname;}public String getSgender() {return sgender;}public void setSgender(String sgender) {this.sgender = sgender;}public Set<Teacher> getTeachers() {return teachers;}public void setTeachers(Set<Teacher> teachers) {this.teachers = teachers;}@Overridepublic String toString() {return "Student [sid=" + sid + ", sname=" + sname + ", sgender=" + sgender + "]";}public Student(Long sid, String sname, String sgender, Set<Teacher> teachers) {super();this.sid = sid;this.sname = sname;this.sgender = sgender;this.teachers = teachers;}public Student() {super();// TODO Auto-generated constructor stub}}
Teacher类
package pojo;import java.util.HashSet;import java.util.Set;public class Teacher {//tid tanme tsexprivate Long tid;private String tname;private String tsex;//集合Studentprivate Set<Student> students=new HashSet<>();@Overridepublic String toString() {return "Teacher [tid=" + tid + ", tname=" + tname + ", tsex=" + tsex + ", students=" + students + "]";}public Long getTid() {return tid;}public void setTid(Long tid) {this.tid = tid;}public String getTname() {return tname;}public void setTname(String tname) {this.tname = tname;}public String getTsex() {return tsex;}public void setTsex(String tsex) {this.tsex = tsex;}public Set<Student> getStudents() {return students;}public void setStudents(Set<Student> students) {this.students = students;}public Teacher(Long tid, String tname, String tsex, Set<Student> students) {super();this.tid = tid;this.tname = tname;this.tsex = tsex;this.students = students;}public Teacher() {super();// TODO Auto-generated constructor stub}}
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"> <hibernate-mapping> <class name="pojo.Student" table="student"> <id name="sid"> <generator class="native"/> </id> <property name="sname"/> <property name="sgender"/> <!--set name当前对象的集合的属性 table:中间表的名字--> <set name="teachers" table="stu_teacher" inverse="false" cascade="save-update,delete"> <!-- 表示当前对象 在中间中的外键 --> <key column="sid"/> <!-- 当前对象中的集合的类型Teacher Teacher的全限定名--> <many-to-many column="tid" class="pojo.Teacher" /> </set> </class> </hibernate-mapping>
Teacher.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"> <hibernate-mapping> <class name="pojo.Teacher" table="teacher"> <id name="tid"> <generator class="native"/> </id> <property name="tname"/> <property name="tsex"/> <!--set name当前对象的集合的属性 table:中间表的名字-->
<set name="students" table="stu_teacher" inverse="true" cascade="save-update,delete">
<!-- 表示当前对象 在中间中的外键 --> <key column="tid"/> <!-- 当前对象中的集合的类型Student在中间中的外键 和全限定名 Teacher的全限定名--> <many-to-many column="sid" class="pojo.Student" /> </set> </class> </hibernate-mapping>hibernate.cfg.xml只需要引入student和teacher的映射配置文件就好
test类
//模拟一对多来实现保存学生和老师/** * 多对多 保存数据 默认是双方都要维护外键 多对多必须要有一方来放弃对外键的维护 inverser="true" * 多对多任意一方放弃对外键的维护 都可以 * 一般情况下:让哪一方来维护外键呢??? 如果我们频繁操作学生,让学生来维护外键,老师就得放弃对外键的维护。 * 现在我存储学生来级联保存老师,学生维护外键,回去中间表里面插入数据; * 这个时候保存老师来级联保存学生,这个时候,老师放弃对外键维护了,不会往中间表里面插入数据。 */@Testpublic void run1(){Session session = HibernateUtil.getCurrentSession();Transaction ts = session.beginTransaction();//Student s1=new Student();Student s2=new Student();Teacher t1=new Teacher();Teacher t2=new Teacher();s1.setSname("同学1");s2.setSname("同学2");t1.setTname("老师1");t2.setTname("老师2");//建立关系 同学1对应2个老师s1.getTeachers().add(t1);s1.getTeachers().add(t2);s2.getTeachers().add(t1);//同学2对应一个老师t1.getStudents().add(s1);t1.getStudents().add(s2);t2.getStudents().add(s1);session.save(t1);session.save(t2);session.save(s1);session.save(s2);ts.commit();}
阅读全文
1 0
- 技术分析之Hibernate的关联关系映射之多对多映射
- 技术分析之Hibernate的关联关系映射之一对多映射
- Hibernate关联关系映射之多对多关联关系
- Hibernate关系映射之多对多关系
- Hibernate关联映射之多对多单/双向关联映射
- Hibernate关联映射之多对多
- Hibernate之多对多关系之间的关系映射
- Hibernate映射之多对一关联映射
- Hibernate映射关系之多对多关系映射
- hibernate关系映射之多对多
- hibernate映射关系之多对多
- 【Hibernate五】关系映射之多对多
- 【Hibernate】(八)关联映射之多对多映射
- Hibernate之关联关系映射(一对多和多对一映射,多对多映射)
- Hibernate表关系映射之多对多映射
- Hibernate关联关系映射(多对一关联映射)
- Hibernate高级实体关联映射之多值的实体关联(多对多关联的两种思路之二)
- Hibernate对象关系映射-- 多对多关联关系映射
- Spring
- django用migrate在已有数据库中新建表
- 计算机网络基础知识-相关问题
- 短实习--Oracle(基础知识)
- Qt里面登录对话框Dialog的show()和exec()
- 技术分析之Hibernate的关联关系映射之多对多映射
- 二叉树的镜像
- Codeforces Round #435 (Div. 2)-Mahmoud and Ehab and the xor(异或)
- scanf输入字符和数字的问题
- 频道管理配置
- 二叉树的先序、中序、后序和中序遍历——Java实现
- 数据结构第三周项目二
- uboot-Makefile分析
- Python 继承