hibernate的基础学习--多对多关联
多对多采用学生老师模型进行测试
学生配置文件:
<?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的基础学习--多对多关联的更多相关文章
- hibernate的基础学习--一对多关联
基本的用户和部门类,只有uuid和名称,没有其余字段. 配置文件 部门: <?xml version="1.0" encoding="utf-8" ?&g ...
- hibernate的基础学习--多表关联数据查询
Hibernate共提供4种多表关联数据查询方式 OID数据查询+OGN数据查询方式 HQL数据查询方式 QBC数据查询方式 本地SQL查询方式(hibernate很少用) 1.OID数据查询+OGN ...
- Hibernate(六)——多对多关联映射
前面几篇文章已经较讲解了三大种关联映射,多对多映射就非常简单了,不过出于对关联映射完整性的考虑,本文还是会简要介绍下多对多关联映射. 1.单向多对多关联映射 情景:一个用户可以有多个角色,比如数据录入 ...
- 一口一口吃掉Hibernate(六)——多对多关联映射
今天来说说hibernate中的多对多关联映射,多对多关联映射涉及到单向映射和双向映射2种. 首先举个多对多关联例子:用户User和角色Role,一个用户可以属于多个角色,一个角色可以有多个用户.这就 ...
- Hibernate一对多、多对一关联
一对多.多对一关联:在多方加外键 示例:Group(一方)和User(多方),一个Group可以有多个User,每个User只能属于一个Group 多对一单向关联 在User(多方)中建Group ...
- java之hibernate之单向的多对多关联映射
这篇 单向的多对多关联映射 1.如何在权限管理中,角色和权限之间的关系就是多对多的关系,表结构为: 2.类结构 Permission.java public class Permission impl ...
- java之hibernate之双向的多对一关联映射
这篇讲解 双向的多对一关联映射 1.表结构和多对一时,一致 2.类结构 Book.java public class Book implements Serializable{ private int ...
- hibernate的基础学习--一对一关联
一对一关系以丈夫和妻子模型 配置文件 妻子配置文件: <?xml version="1.0" encoding="utf-8" ?> <!DO ...
- hibernate中配置单向多对一关联,和双向一对多,双向多对多
什么是一对多,多对一? 一对多,比如你去找一个父亲的所有孩子,孩子可能有两个,三个甚至四个孩子. 这就是一对多 父亲是1 孩子是多 多对一,比如你到了两个孩子,它们都是有一个共同的父亲. 此时孩子就是 ...
随机推荐
- Web常见安全漏洞原理及防范-学习笔记
公司在i春秋上面报的一个课程.http://www.ichunqiu.com/course/55885,视频学习. OWASP (Open Web Application Secutiry Proje ...
- nexus批量更新jar包
nexus批量更新jar包 学习了:https://blog.csdn.net/newtelcom/article/details/54379607 手动进行jar包的拷贝,在维护界面内进行批量更新:
- 基于社交网络的情绪化分析IV
基于社交网络的情绪化分析IV By 白熊花田(http://blog.csdn.net/whiterbear) 转载需注明出处,谢谢. 前面进行了微博数据的抓取,简单的处理,类似度分析.后面两篇进行学 ...
- Go fsm
package fsm import ( "log" ) type EvtIf interface { GetEvtType() string } type Action inte ...
- Effective C++ 条款四 确定对象被使用前已被初始化
1.对于某些array不保证其内容被初始化,而vector(来自STL)却有此保证. 2.永远在使用对象前初始化.对于无任何成员的内置类型,必须手工完成. int x = 0; c ...
- 组件接口(API)设计指南[2]-类接口(class interface)
*返回文件夹阅读其它章节: http://blog.csdn.net/cuibo1123/article/details/39894477 类接口(class interface) 你能够參考MGTi ...
- MeiTuanLocateCity
https://github.com/eltld/MeiTuanLocateCity
- jvm 调优(2)垃圾回收算法
可以从不同的的角度去划分垃圾回收算法: 按照基本回收策略分 引用计数(Reference Counting): 比较古老的回收算法.原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数. ...
- vmware nat不能上网的解决办法
1 很多奇怪的问题都是vmware突然不能上网导致的 当yum.pip等包管理工具突然不能上网了时,要ping www.baidu.com,看看网络是不是好的. 2 nat网络出现问题的解决办法 2. ...
- Hadoop MapReduce基本原理
一.什么是: MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算.概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都 ...