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

学生配置文件:

 <?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. 【Kotlin】spring boot项目中,在Idea下启动,报错@Configuration class 'BugsnagClient' may not be final.

    报错如下: Exception encountered during context initialization - cancelling refresh attempt: org.springfr ...

  2. 构建可读性更高的 ASP.NET Core 路由

    原文:构建可读性更高的 ASP.NET Core 路由 一.前言 不知你在平时上网时有没有注意到,绝大多数网站的 URL 地址都是小写的英文字母,而我们使用 .NET/.NET Core MVC 开发 ...

  3. PHPMailer发送邮件乱码

    PHPMailer发送邮件乱码, $mail->CharSet="GB2312";$mail->Encoding = "base64"; 设成这样不 ...

  4. [Python-MATLAB] 在Python中调用MATLAB的API

    可以参考官方的说明文档: http://cn.mathworks.com/help/matlab/matlab_external/get-started-with-matlab-engine-for- ...

  5. Python 包的制作(__init__.py)

    如何制作一个自己的包:首先,需要创建一个文件夹,将其作为顶层包,在此文件夹内我们可以定义各个不同的子文件夹与 .py 文件作为各个子包与模块注意:在每个包文件夹下都需要有一个 __init__.py ...

  6. Arduino 网络时钟client

    升级! 添加了12h/24h 的开关,还有标准/ 夏令时开关!见步骤7 & 步骤8. 你是否曾想要一个和办公室时间来源全然准确的表? 这就有一个网络的办公时间server,你能够根据它并同步你 ...

  7. javascript return 跟 break区别

    break是跳出当前循环,return是中止函数的执行

  8. linux输入子系统(6)-input子系统介绍及结构图

    注:本系列转自: http://www.ourunix.org/post/290.html input子系统介绍         输入设备(如按键,键盘,触摸屏,鼠标,蜂鸣器等)是典型的字符设备,其一 ...

  9. WebGIS中地图恢复初始位置及状态

    我想实现这么一个效果:地图任意缩放后,点击一个按钮,将立刻回到地图初始加载时的位置,并且是没有缩放的状态. 怎么办呢?最好的办法就是用Home按钮. <!DOCTYPE HTML> < ...

  10. Hadoop提供的reduce函数中Iterable 接口只能遍历一次的问题

    今天在写MapReduce中的reduce函数时,碰到个问题,特此记录一下: void reduce(key, Iterable<*>values,...) { for(* v:value ...