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

学生配置文件:

 <?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. 管理weblogic服务的启动和停止

    2012-11-10 12:58 26036人阅读 评论(4) 收藏 举报 分类: WebLogic(10) 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 介绍 Weblog ...

  2. Mysql数据库中CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP区别

    如图所示,mysql数据库中,当字段类型为timestamp时,如果默认值取CURRENT_TIMESTAMP,则在insert一条记录时,end_time的值自动设置为系统当前时间,如果勾选了 ON ...

  3. 在Ubuntu 10.10下安装JDK配置Eclipse及Tomcat

    1.安装JDK 1.1.到官网下载相关的JDK 这里下载的是 jdk-6u23-linux-i586.bin. 下载地址:http://www.oracle.com/technetwork/java/ ...

  4. JZ2440:时钟设置

    这一节的目标是对板子上的时钟有一个初步的了解.而且能通过初步设置.为我们接下来的程序做准备. 1. 板子上的基本资源: 板载晶振12M 主时钟源和 USB 时钟源都是晶振 2. 手冊中的相关项(按时钟 ...

  5. 从头认识java-15.5 使用LinkedHashSet须要注意的地方

    再接着上一个章节.我们来聊一下使用LinkedHashSet须要注意的地方. LinkedHashSet特点: (1)元素是有顺序的 (2)元素是不反复的 (3)底层数据结构是依照链表的结构存储的 ( ...

  6. ZOJ 3230 Solving the Problems(数学 优先队列啊)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3230 Programming is fun, Aaron is ...

  7. Vue 之 npm 及 安装的包

    1  npm相关 1.1 npm 是 基于Node.js 的,所以要先安装Node.js 在浏览器地址栏输入https://nodejs.org/en/, 进入Node.js官网后,点击下载左边的稳定 ...

  8. liberOJ #2033. 「SDOI2016」生成魔咒 后缀数组

    #2033. 「SDOI2016」生成魔咒     题目描述 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1 11.2 22 拼凑起来形成一个魔咒串 [1,2] [1, 2] ...

  9. bash shell和进程

    1 exec builtin 不创建子shell,在原进程的上启动新的脚本,但是它会把老shell的环境清理掉,所以,它从原shell中什么也不继承,在一个干净的环境中执行新的脚本.执行完之后退出当前 ...

  10. python安装easy_install和pip

    1 安装easy_install https://pypi.python.org/pypi/setuptools 下载setuptools 执行python setup.py install就安装成功 ...