多对多采用学生老师模型进行测试

学生配置文件:

 <?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="hib.po.Student" table="t_student">
<id name="stuId" column="stu_id">
<generator class="uuid"></generator>
</id>
<property name="stuName" column="stuname"></property> <!-- 和老师的关联关系:teachers
name:关联关系属性名称
table:中间表名称
inverse:关联关系的维护权
cascade:级联 delete update
-->
<set name="teachers" table="t_stu_tea">
<!--column:中间表中指向当前模型对应表(t_student)的外键名-->
<key column="stu_id"></key>
<!--
class:关联关系字段集合的元素的类型
column:中间表指向当前模型关联的模型对应表(t_student)的外键
-->
<many-to-many class="hib.po.Teacher" column="tea_id"></many-to-many>
</set>
</class>
</hibernate-mapping>

老师配置文件:

 <?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="hib.po.Teacher" table="t_teacher">
<id name="teaId" column="tea_id">
<generator class="uuid"></generator>
</id>
<property name="teaName" column="teaname"></property> <!-- 和学生的关联关系:students
name:关联关系属性名称
table:中间表名称(必须和对应关联表中配置一致)
放弃维护关系 inverse="true"
-->
<set name="students" table="t_stu_tea">
<!--column:中间表中指向当前模型对应表(t_teacher)的外键名-->
<key column="tea_id"></key> <!--
class:关联关系字段集合的元素的类型
column:中间表指向当前模型关联的模型对应表(t_student)的外键
-->
<many-to-many class="hib.po.Student" column="stu_id"></many-to-many>
</set>
</class>
</hibernate-mapping>

测试方法:

 public class TestHibernate {

     /**
* 添加数据记录
*/
@Test
public void addTeacherStudent() {
SessionFactory sf = H3Util.getSessionFactory();
Session session = sf.openSession();
Transaction ts = session.beginTransaction(); Student stu1 = new Student(null, "张三", null);
Student stu2 = new Student(null, "李四", null); Teacher tea1 = new Teacher(null, "张老师", null);
Teacher tea2 = new Teacher(null, "李老师", null); session.save(stu1);
session.save(stu2);
session.save(tea1);
session.save(tea2); ts.commit();
session.close();
}
@Test /* 关联关系*/
public void updateStudent() {
SessionFactory sf = H3Util.getSessionFactory();
Session session = sf.openSession();
Transaction ts = session.beginTransaction(); Teacher t1 = (Teacher) session.get(Teacher.class, "4028810a57d19c510157d19c55650002");
Student s1 = (Student) session.get(Student.class, "4028810a57d19c510157d19c554a0000");
Student s2 = (Student) session.get(Student.class, "4028810a57d19c510157d19c55650001");
Set<Teacher> st1 = s1.getTeachers();
st1.add(t1);
Set<Teacher> st2 = s2.getTeachers();
st2.add(t1);
s1.setTeachers(st1);
s2.setTeachers(st2);
session.update(s1);
session.update(s2); ts.commit();
session.close();
}
@Test
public void delStudent1() {
SessionFactory sf = H3Util.getSessionFactory();
Session session = sf.openSession();
Transaction ts = session.beginTransaction(); //张三
Student stu = (Student) session.get(Student.class, "4028810a57d19c510157d19c554a0000"); //先删除关联关系(中间表字段)再删除本对象
session.delete(stu); ts.commit();
session.close();
} }

hibernate的基础学习--多对多关联的更多相关文章

  1. hibernate的基础学习--一对多关联

    基本的用户和部门类,只有uuid和名称,没有其余字段. 配置文件 部门: <?xml version="1.0" encoding="utf-8" ?&g ...

  2. hibernate的基础学习--多表关联数据查询

    Hibernate共提供4种多表关联数据查询方式 OID数据查询+OGN数据查询方式 HQL数据查询方式 QBC数据查询方式 本地SQL查询方式(hibernate很少用) 1.OID数据查询+OGN ...

  3. Hibernate(六)——多对多关联映射

    前面几篇文章已经较讲解了三大种关联映射,多对多映射就非常简单了,不过出于对关联映射完整性的考虑,本文还是会简要介绍下多对多关联映射. 1.单向多对多关联映射 情景:一个用户可以有多个角色,比如数据录入 ...

  4. 一口一口吃掉Hibernate(六)——多对多关联映射

    今天来说说hibernate中的多对多关联映射,多对多关联映射涉及到单向映射和双向映射2种. 首先举个多对多关联例子:用户User和角色Role,一个用户可以属于多个角色,一个角色可以有多个用户.这就 ...

  5. Hibernate一对多、多对一关联

    一对多.多对一关联:在多方加外键 示例:Group(一方)和User(多方),一个Group可以有多个User,每个User只能属于一个Group   多对一单向关联 在User(多方)中建Group ...

  6. java之hibernate之单向的多对多关联映射

    这篇 单向的多对多关联映射 1.如何在权限管理中,角色和权限之间的关系就是多对多的关系,表结构为: 2.类结构 Permission.java public class Permission impl ...

  7. java之hibernate之双向的多对一关联映射

    这篇讲解 双向的多对一关联映射 1.表结构和多对一时,一致 2.类结构 Book.java public class Book implements Serializable{ private int ...

  8. hibernate的基础学习--一对一关联

    一对一关系以丈夫和妻子模型 配置文件 妻子配置文件: <?xml version="1.0" encoding="utf-8" ?> <!DO ...

  9. hibernate中配置单向多对一关联,和双向一对多,双向多对多

    什么是一对多,多对一? 一对多,比如你去找一个父亲的所有孩子,孩子可能有两个,三个甚至四个孩子. 这就是一对多 父亲是1 孩子是多 多对一,比如你到了两个孩子,它们都是有一个共同的父亲. 此时孩子就是 ...

随机推荐

  1. 【swagger】1.swagger提供开发者文档--简单集成到spring boot中【spring mvc】【spring boot】

    swagger提供开发者文档 ======================================================== 作用:想使用swagger的同学,一定是想用它来做前后台 ...

  2. 使用BatteryHistorian分析和优化应用电量

    欢迎Follow我的GitHub, 关注我的CSDN. 在Android项目中, 较难监控应用的电量消耗, 可是用户却很关心手机的待机时间. 过度耗电的应用, 会遭到用户无情的卸载, 不要存在侥幸心理 ...

  3. Linux上Libevent的安装

    1.下载wget -O libevent-2.0.21-stable.tar.gz https://github.com/downloads/libevent/libevent/libevent-2. ...

  4. JfreeChart折线图 CSDN-李鹏飞

    今天公司里分配给我的工作是JfreeChart折线图本人之前也没接触过如今让我们大家一起完毕! 在这个公司,用到了太多的JfreeChart,今天就对折线图作一个总结,希望对大家有点帮助,我这里直接是 ...

  5. peewee模块

    Peewee Python中数据库与ORM主要做这几件事: 数据库方面由程序员设计表关系,主要是1v1,1vN,NvN: ORM做数据类型映射,将数据库表示的char/int等类型映射成Python对 ...

  6. effctive C++ 读书笔记 条款 16

    条款16 成对使用new和delete时要採取同样形式 #include <iostream> #include <string> using namespace std; / ...

  7. LeetCode(66)题解: Plus One

    https://leetcode.com/problems/plus-one/ 题目: Given a non-negative number represented as an array of d ...

  8. Hihocoder #1527 : 快速乘法 DP

    时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 在写代码时,我们经常要用到类似 x × a 这样的语句( a 是常数).众所周知,计算机进行乘法运算是非常慢的,所以我们需 ...

  9. centos笔记-安装特定版本的mysql

    centos6的yum默认安装的mysql是5.1版, 如果要安装5.6.16 版,有三个办法 1.yum方式, 这个方式的好处是通过yum安装卸载都很方便,坏处是版本无法详细制定,比如官方版本yum ...

  10. C++11 条件变量

    C++11中的条件变量提供了用户等待的同步机制,在同步队列的应用中有很大的便利. 简单同步队列代码如下(SimpleSyncQueue.h): #ifndef SIMPLESYNCQUEUE_H #d ...