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

学生配置文件:

 <?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. magic packet 远程唤醒需填写 IP broadcast address

    之前摸索过电脑,知道hp compaq6910p有远程唤醒功能的.当时没在意.如今忽然有了实际的需求,就想起来折腾一下了.看了网上的做法,主要是双方面设置,BIOS和网卡.之后就能够用magic pa ...

  2. springboot mybatis 项目框架源码 shiro 集成代码生成器 ehcache缓存

    1.代码生成器: [正反双向](单表.主表.明细表.树形表,快速开发利器)freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本.处理类.service等完整模块2. ...

  3. 转:Redis监控技巧

    转自:http://blog.nosqlfan.com/html/4166.html Redis监控技巧 作者:nosqlfan on 星期二, 一月 29, 2013 · 16条评论 [阅读:25, ...

  4. centos或者ubuntu设置ssh免密码登陆

    1. 输入  # ssh-keygen -t rsa -P ""  然后一路回车 2.输入  # cat ~/.ssh/id_rsa.pub >> ~/.ssh/aut ...

  5. error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token

    头文件函数声明少了“:(分号)”

  6. Json的简单介绍和解析

    Json:JavaScript对象表示法(JavaScript Object Noatation) Json是存储和交换文本信息的语法,类似XML.它采用键值对的方式来组织,易于人们阅读和编写,同时也 ...

  7. 在vc6.0下编的对话框界面如果没做过其他处理,往往显的很生硬,怎么样才能使他有Windows XP的风格呢,其实也很简单,我们来看看下面两种方法。

    在vc6.0下编的对话框界面如果没做过其他处理,往往显的很生硬,怎么样才能使他有Windows XP的风格呢,其实也很简单,我们来看看下面两种方法.    方法一: 1.首先确认你在Windows   ...

  8. Messaging Patterns for Event-Driven Microservices

    Messaging Patterns for Event-Driven Microservices https://content.pivotal.io/blog/messaging-patterns ...

  9. IMP-00009 And IMP-00028

    导出文件异常结束” 错误,google一下,发现可能有如下原因导致 1.imp的数据太大,没有写buffer和commit 2.两个数据库字符集不同 3.从低版本exp的dmp文件,向高版本imp 4 ...

  10. OOalv 实现带出栏位描述

    .类定义 CLASS lcl_event_handler DEFINITION. PUBLIC SECTION. METHODS: handle_data_changed_finished FOR E ...