关系映射多对多详解

SQLAlchemy 2.0 关系映射实战:3种关联模式(一对一/一对多/多对多)代码详解 本文详细解析了SQLAlchemy 2.0中的三种关系映射模式(一对一、一对多、多对多),通过实战代码演示了如何高效配置和优化数据库关联。内容涵盖基础实现、级联操作、查询优化及SQLAlchemy 2.0新特性,帮助Python开发者掌握ORM高级技巧,提升数据建模能力。 阅读详情

关系映射多对多

一.             多对多:学生和老师是一个典型的多对多事例;在操作和性能方面都不太理想,所以多对多的映射使用较少,实际使用中最好转换成一对多的对象模型;Hibernate会为我们创建中间关联表,转换成两个一对多。

二.现对表进行一下简单的分析

 

 

 

 

 

 

 

 

 

 

三.单向:

    在维持关系一端的映射文件中加入:

<hibernate-mapping

    package="com.hbsi.domain">

 

    <class name="Student" table="student">

       <id name="id"column="id">

           <generator class="native"/>

       </id>

       <property name="name"/>

       <set name="teachers"table="teacher_student"> <!-- table是用来指定中间表的属性 -->

           <key column="student_id"></key> <!-- 查找学生id时,链接中间表表的student_id -->

       <many-to-many class="Teacher"column="teacher_id"/>

       </set>

    </class>

</hibernate-mapping>

 

         双向:

       在两边都要加入相对的配置信息:

四.测试

package com.hbsi.test;

 

import java.util.HashSet;

import java.util.Iterator;

import java.util.Set;

 

import org.hibernate.Session;

import org.hibernate.Transaction;

 

import com.hbsi.domain.Deparment;

import com.hbsi.domain.Employee;

import com.hbsi.domain.Student;

import com.hbsi.domain.Teacher;

import com.hbsi.hibernate.utils.HibernateUtil;

 

public class Many2Many {

    public static void main(String[] args) {

       add();

       query(1);

    }

   

   

    public static void add(){

      

       Session s=null;

       Transaction tx=null;

       try{

           s= HibernateUtil.getSession();

           tx=s.beginTransaction();

           //增加

           Teacher t1=new Teacher();

           t1.setName("T1");

           Teacher t2=new Teacher();

           t2.setName("T2");

          

          

           Student s1=new Student();

           s1.setName("s1");

           Student s2=new Student();

           s2.setName("s2");

          

          

           Set<Student> ss=new HashSet<Student>();

           ss.add(s1);

           ss.add(s2);

           //如果注释了下面两句话,不会错但是没有了关联

           t1.setStudents(ss);

           t2.setStudents(ss);

          

           //语句报错主键不能重复,写一方就行了

//         Set<Teacher> ts=new HashSet<Teacher>();

//         ts.add(t1);

//         ts.add(t2);

//        

//         s1.setTeachets(ts);

//         s1.setTeachets(ts);

          

           s.save(t1);

           s.save(t2);

           s.save(s1);

           s.save(s2);

          

          

          

          

          

           tx.commit();

          

          

       }finally{

           if(s!=null)

              s.close();

       }

      

    }

    public static void query(int teacherId){

       Session s=null;

       Transaction tx=null;

       try{

           s= HibernateUtil.getSession();

           tx=s.beginTransaction();

          

           Teacher t=(Teacher) s.get(Teacher.class,teacherId);

       System.out.println(t.getName());

       System.out.println(" 教授教授的学生 ");

       Iterator<Student> it=t.getStudents().iterator();

       while(it.hasNext()){

           Student stu= it.next();

           System.out.println(stu.getName());

          

       Student ts= (Student) s.get(Student.class,teacherId);

           System.out.println(ts.getName());

           System.out.println("学生被那个老师教了 ");

           Iterator<Teacher> its=ts.getTeachers().iterator();

           while(its.hasNext()){

              Teacher teach= its.next();

              System.out.println(teach.getName());

             

           }

          

       }

          

          

          

       }finally{

           if(s!=null)

              s.close();

       }

      

    }

}

   

      

      

      

   

 

 

 

Java 领域 Hibernate 的多对多关系映射详解 本文旨在全面讲解 Hibernate 中多对多关系的映射技术,包括基础实现和高级用法。我们将覆盖从简单映射到复杂场景的处理,帮助开发者理解并正确应用这一重要特性。通过生活实例引入多对多关系概念详细讲解 Hibernate 中的三种实现方式提供完整代码示例和实际应用场景讨论性能优化和常见问题解决方案: 对象关系映射,将面向对象语言中的对象与关系型数据库中的表进行映射的技术关联映射: 描述对象之间关系的映射配置中间表/连接表: 在关系型数据库中用于实现多对多关系的辅助表多对多关系。 阅读详情

相关推荐

【MyBatis】映射一对多和多对多关系配置(看完这篇不吃亏)

resultMap 允许我们定义复杂的映射规则,将结果集中的多个字段映射到一个对象中。因为我们是一对多的所以我们再编写vo类的时候,里面是使用list集合。建立我们给的sql文件,运行它用这里面的表,让我们更好的示例操作。在我们的配置文件里面配置我们需要的几个表,自动生成所需文件。当然我们要先建立这个包里面的类才能更好的下一步。在原本的基础的sql上我们增加一个一对多的sql。在上面我们已经写好了sql,我们生成对应的。在我们的里面添加一个sql的方法编写。在生成的接口类里面编写对应的接口方法。

无法自律的人的博客 5964

8.多对多的关系映射

多对多的关系映射 员工和角色是多对多的关系,一个员工可以分配多个角色,一个角色可以分配给多个员工 类图: 表关系:(需要有一个中间表) EmpNo    ename                               empNo            roleId                                 roleId       roleName ...

zhangyan的博客 669

精通Hibernate双向多对多关系映射:注解实战

本文还有配套的精品资源,点击获取 简介:本文深入探讨在Java开发中如何使用Hibernate框架的注解实现双向多对多关系映射。首先,介绍多对多关联的概念和Hibernate中实现该关系的基本注解。接着,详细阐述如何通过 @JoinTable 注解配置中间表,以及在双向关系中维护数据一致性的方法。最后,提供示例代码和查询操作的具体实现。文章强调理解双向多对多映...

weixin_42584507的博客 1000

【Hibernate步步为营】--多对多映射详解

上篇文章详细讨论了一对多映射,在一对多映射中单向的关联映射会有很多问题,所以不建议使用如果非要采用一对多的映射的话可以考虑使用双向关联来优化之间的关系,一对多的映射其实质上是在一的一端使用<many-to-one>标签来标明它们之间的关系,另外还需要在一的一端的对象中使用set标明集合映射。

航帆远洋 6151

OpenCLI入门:让任何网站变成你的命令行工具(超详细版)

最有用的工具,往往是最简单的。 opencli就是这样。 它不会帮你写代码,不会帮你做决策,但它能把200+个平台装进你的命令行。 让你用最简单的方式,获取最丰富的数据。

weixin_66295112的博客 2088

CUDA编译踩坑实录:如何正确设置-gencode参数适配你的GPU算力

本文深入解析CUDA编译中-gencode参数的核心原理与实战配置,帮助开发者解决常见的'Unsupported gpu architecture'错误。通过厘清虚拟架构与真实架构的区别,并提供多版本兼容的CMake配置方案,确保编译出的代码能精准适配不同GPU算力,兼顾性能与广泛兼容性。

weixin_28829903的博客 338

java一对多关联映射_Hibernate之关联关系映射(一对多和多对一映射,多对多映射)...

~~~接着之前的Hibernate框架接着学习(上篇面试过后发现真的需要学习一下框架了,不然又被忽悠让去培训。)~~~1:Hibernate的关联映射,存在一对多和多对一映射,多对多映射:1.1:一对多和多对一映射,举例说明:学生和老师:一个老师可以教多个学生 【一对多映射】多个学生可以被一个老师教【多对一映射】部门与员工:一个部门有多个员工【一对多映射】多个员工属于一个部门【多对一映射】1.2:...

weixin_32829465的博客 361

树莓派5搭建ROS1开发环境:从系统安装到环境变量配置

本文详细指导如何在树莓派5上搭建ROS1开发环境。针对树莓派OS非标准安装路径导致的常见CMake报错问题,提供了从系统烧录、一键安装ROS到关键环境变量配置的完整解决方案,确保工作空间能成功编译,助力机器人项目开发。

weixin_29159127的博客 384

多对多关系映射

域模型和关系模型 关系表单向多对多 n-n 的关联必须使用连接表 与 1-n 映射类似,必须为 set 集合元素添加 key 子元素,指定 CATEGORIES_ITEMS 表中参照 CATEGORIES 表的外键为 CATEGORIY_ID. 与 1-n 关联映射不同的是,建立 n-n 关联时, 集合中的元素使用 many-to-many. many-to-many 子元素的 class 属性

超胆孤侠 558

峰值电流模式CCM BUCK的传递函数推导

电流内环闭环传递函数: Gci(s)=i^L(s)v^comp(s)=FmGid(s)1+KRiHe(s)FmGid(s)=1Ri11+s[mcL+(0.5VIN−Vo)RiVINRifSW]+s21(πfSW)2 G_{ci}(s)=\frac{\hat i_{L}(s)}{\hat v_{comp}(s)}=\frac {F_mG_{id}(s)}{1+KR_iH_e(s)F_mG_{id}(s)}=\frac{1}{R_i}\frac{1}{1+s[\frac{m_cL+(0.5V_{IN}-V_o)

c007106333的博客 2354

汇川AM系列ethercat控制伺服的使用说明(含转矩模式)

本文以一个实际例子,介绍ethercat伺服驱动器的工作原理,以及在汇川AM系列PLC中,如何点动、定位、速度、转矩控制ethercat伺服。

qq_34047402的博客 5111

Hibernate 多对多关系映射详解

多对多 转换成N-1-N; 典型的例子 老师学生 表结构: 将多对多的关系进行 N - 1-  N 的转换 对象结构: public class Student { private int id; private String name; private Set teachers; public class

咖啡 562

学Simulink——基于高渗透率可再生能源微电网的逆变器系统场景实例:含高比例逆变型电源的微电网暂态稳定性分析

本文详细介绍了基于MATLAB/Simulink的高渗透率可再生能源微电网建模方法,重点分析含高比例逆变型电源的微电网暂态稳定性问题。通过构建包含光伏、风电、逆变器和电网等模块的系统模型,展示了从项目创建、模块搭建到控制策略实现的完整过程。文章特别提供了逆变器PQ控制算法和故障处理逻辑的代码示例,并介绍了仿真参数设置与结果分析方法。该模型能有效评估微电网在故障条件下的动态响应特性,为优化逆变器控制策略提供依据,对现代智能电网研究具有重要意义。

xiaoheshang_123的博客 140

Hibernate中多对多关系映射案例详解

前言 在项目开发中,在数据库中的设计中,一定会遇到多对多的关系。比如:老师与学生的关系,一个老师会有多个学生,一个学生也会有多个老师,这种关系称为多对对的关系,在之前的jdb中操作数据库,在满足三大范式的情况下,必须要保存三张表,而插入数据库的原生sql语句需要写很多条,Hibernate为我们封装了原生的sql语句,提供了对应的多对多映射关系的相关配置,我们只要会用它来进行实际的开发即可,大大

nwpu_geeker的博客 2775

Qualcomm AI Engine Direct SDK(QNN)的使用介绍

Qualcomm AI Engine Direct SDK,高通新的AI模型推理框架,又名QNN,为AI开发提供统一API的底层框架。通过这个SDK,可以在高通的 CPU/GPU和HTP上对AI模型进行性能加速。2.Qualcomm AI Engine Direct SDK的公开英文文档。1.Qualcomm AI Engine Direct SDK的下载和安装。

u013250861的博客 6971

区块链技术与应用 【全国职业院校技能大赛国赛题目解析】Caliper从0到使用

技能大赛样题解析,caliper题目从0到使用

weixin_52865146的博客 2076

Hibernate多对多的关系映射,详解(代码

direct messages to file mylog.log log4j.appender.file=org.apache.log4j.FileAppender log4j.appender.file.File=c:mylog.log log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

qdwd888的博客 255

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

hibernate 表关系映射详解之多对多

举例:商品类型表与商品表,每种类型对应多个商品,每个商品对应多种类型 关系图: hirbernate实现多对多映射有两种方法,第一种是通过中间表直接映射,第二种是通过中间表间接映射。 直接映射: 配置实体类(因为都是多对多的关系,所以双方都具有set集合): 配置实体类的映射文件: 分析:...

weixin_30807677的博客 141

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Hibernate多对多的关系映射,详解(代码+图解)与应用 举个栗子,搞的清楚

Hibernate多对多的关系映射 在游戏当中有玩家和角色,玩家可以选择多个不同的角色,同时角色也可以被多个玩家同时选择 或者一个游戏当中有多种不同的武器,玩家可以选择多个不同的武器,同时武器也可以被不同的玩家选择

程序员猫爪 2012

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

MyBatis多表查询实战:从一对一、一对多到多对多关系映射详解

在关系型数据库应用开发中,多表关联查询是处理复杂业务逻辑的核心技术之一。其基本原理是通过SQL的JOIN操作,将分散在不同表中的数据根据关联关系进行连接,从而在一次查询中获取完整的业务视图。这项技术的核心价值在于,它能够有效减少数据库访问次数,提升数据检索效率,并保证数据的一致性。在实际应用场景中,无论是电商平台的订单与用户信息关联,还是企业管理系统中的部门与员工数据整合,都离不开高效的多表查询。MyBatis作为Java领域广泛使用的持久层框架,通过其强大的ResultMap配置,特别是associati

weixin_33738982的博客 364

SQLAlchemy 关系映射详解:一对一、一对多、多对多到底是怎么实现的?看完就懂!

摘要:刚开始学习 SQLAlchemy 时,relationship() 往往是最容易让人迷糊的地方。一对一、一对多、多对多到底有什么区别?relationship() 和外键又是什么关系?为什么有时候需要 back_populates,有时候还要使用中间表?本文以“教导者带新手”的方式,从数据库表关系出发,结合完整代码,一步步讲清楚 SQLAlchemy 中一对一、一对多和多对多关系的实现方式。

JSTN1906699530的博客 70

SpringData JPA:实体映射与关系映射详解

Spring Data JPA的实体映射与关系映射能力为Java开发者提供了强大而灵活的数据持久化解决方案。通过合理使用实体映射、关系映射、继承策略和生命周期回调,开发者可以构建出既符合面向对象原则又高效利用关系型数据库的应用。本文详细介绍了基本实体映射、实体属性映射、复合主键映射以及四种核心关系映射类型的实现方法,并探讨了实体继承的三种策略和实体生命周期事件的应用。在实际项目中,选择合适的映射策略对于提高应用性能和可维护性至关重要。

程序媛学姐的博客 1569
上一篇: hibernate关联映射详解
下一篇: hibernate级联操作详解
日依
博客等级 码龄15年 165粉丝 165原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值