Hibernate多对多的理解

简介: Studetn类实现序列化接口 Integer id String name set coursers Course类实现序列化接口 Integer id String name set students 注意事项: 1,configuration.

Studetn类实现序列化接口
Integer id
String name
set coursers

Course类实现序列化接口
Integer id
String name
set students


注意事项:
1,configuration.configure("cn/itcast/many2many/hibernate.cfg.xml");应该写全路径!
2,配置文件和映射文件应该在包里和.java是同级别的!!


重要知识点总结:
1,在多对多的映射文件里,要是此set设置了反转,那么不可以再设置级联操作。否则报错。
比如今天的例子在学生里设置:inverse="true" cascade="true"是错误的!!!!!在第一次向各个表里放数据时就是错误的!!
2,两端都是映射到了中间表student_course!!!!!!!!!!!!!!!!

 

 
今天把多对多敲了一下,对于key的理解比昨天要清楚,准确好多,现在总结如下。     
     
many to many
学生端的映射文件
<set name="courses" table="student_course"  inverse="true">      
  <key column="sid" />               
  <many-to-many  class="cn.itcast.many2many.Course"  column="cid" />   
</set>


以学生端的配置文件为例子
明确视点:站在学生端
明确目标:查看一个学生选了什么课程
明确方法:依靠此学生的id去中间表student_course查该生选修课程信息(中间表只有sid,cid),即可知道了cid.再通过cid去课程表查询
就知道了此课程的详细信息
查询语句:……………………………………where sid=该生的id;

这就是我们要看courses集合里到底有什么课程的过程。
所以sid就是我们要得到courses的必经之路。
翻译成大白话就是:属性courses集合集合里面的东西叫name="courses"来自table="student_course"类型是
class="cn.itcast.many2many.Course"。我们要通过中间表得到里面的数据除了要提供一个查询条件(该生id)还要明白满足
什么条件(where sid=该生的id)才是能得到我们想要的信息。
总结:key就是我们想得到courses时要用到的中间表student_course的字段

还有一点:column="cid" 通过课程表的外键查询课程的其他信息即select id,name from course 课程id=cid

注意:两个column都是来自于中间表student_course!!!

 

一对多也应该这么理解
客户端的映射文件
<set name="orders" table="orders" cascade="delete" inverse="true" lazy="true">
        <key>                              
            <column name="customer_id"/>
        </key>
        <one-to-many class="cn.itcast.hibernate.many2one.Order"/>
</set>

 

这些是昨天写的废话:
翻译:里面有一个集合来存放学生选的课程叫courses。就用这个set来描述此字段course
      它们来自于表student_course
      同理,key是用来描述table属性的。就是说这个表和我(学生表)产生联系的是sid
      many to many 的class属性用来描述集合里面的东西是什么类型的。
     
      这是一个中间表。是一个桥梁。我们要走过这个桥梁,从一端到另一段。
      左端就是学生,右端就是课程。
      这个桥梁和我产生联系的就是sid  左端这是
      我要去的右端是通过cid去的。 就是说我们要查到学生选的什么课程,要通过中间表的cid字段。
    
      所以说这many  to  many标签有两个作用
      1,说明了集合里存放数据的类型
      2,到底怎么样可以查到这些数据

相关文章
|
3月前
|
Java 数据库连接 API
解锁高效开发秘籍:深入探究 Hibernate 如何优雅处理一对多与多对多关系,让数据映射再无烦恼!
【9月更文挑战第3天】Hibernate 是 Java 领域中最流行的 ORM 框架之一,广泛用于处理实体对象与数据库表之间的映射。尤其在处理复杂关系如一对多和多对多时,Hibernate 提供了丰富的 API 和配置选项。本文通过具体代码示例,展示如何使用 `@OneToMany`、`@JoinColumn`、`@ManyToMany` 和 `@JoinTable` 等注解优雅地实现这些关系,帮助开发者保持代码简洁的同时确保数据一致性。
63 4
|
7月前
|
Java 数据库连接 数据库
hibernate多对多、正向工程创建数据表——访问温馨提示
hibernate多对多、正向工程创建数据表——访问温馨提示
|
SQL XML 存储
Hibernate框架【五】——基本映射——多对多映射
Hibernate框架【五】——基本映射——多对多映射
203 0
|
7月前
|
机器学习/深度学习 SQL Java
Hibernate - 多对多关联关系映射
Hibernate - 多对多关联关系映射
71 0
|
Java 数据库连接 数据库
hibernate多对多、正向工程创建数据表——访问温馨提示
hibernate多对多、正向工程创建数据表——访问温馨提示
|
XML Java 数据库连接
《Hibernate上课笔记》-----class7----Hibernate实现多对多关联映射
《Hibernate上课笔记》-----class7----Hibernate实现多对多关联映射
99 0
《Hibernate上课笔记》-----class7----Hibernate实现多对多关联映射
|
Java 数据库连接 网络安全
【SSH快速进阶】——Hibernate 多对多映射
说到多对多关系,印象最深刻的就是大学的选修课。**一个学生可以选修多门课程,一门课程可以有多个学生选修,学生所选的每一门课程还有成绩**。这个场景的E-R图如下:
【SSH快速进阶】——Hibernate 多对多映射
|
SQL Oracle Java
hibernate(四) 双向多对多映射关系
现在继上一章节的一对多的映射关系讲解后,今天来讲讲多对多的映射关系把,明白了一对多,多对多个人感觉还是比较容易的,需要理清楚其数据库关系图,那么你就拿下了它。映射文件的配置还是那么些死东西。
176 0
|
Java 关系型数据库 数据库连接
Hibernate-ORM:12.Hibernate中的多对多关联关系
    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------       本篇博客将讲述Hibernate中的多对多关联关系的操作,准备的篇幅较少,望海涵   一,讲述多对多   多对多的关联关系,比如学生和教师来说,一个学生由多个教师授课...
1280 0