首页
学习
活动
专区
圈层
工具
发布

Hibernate学习笔记 多表映射

前面说了Hibernate的单表映射,由于是实体类和数据表之间一对一的映射,所以比较简单。现在就来说说多表映射,这需要涉及到多个实体类和数据表之间的关系。因此稍微复杂一点。...双向的OneToMany 理解了单向OneToMany之后,很容易就能理解双向OneToMany了。两个实体类一边需要使用ManyToOne注解,另外一边的集合类使用OneToMany注解。...需要注意在双向注解中,OneToMany需要额外一个参数,mappedBy,指定ManyToOne注解那一边的属性名,这样Hibernate才会明白这是一个双向注解。...由于用户上传的头像文件大小可大可小,因此不能放在用户表中。这时候就需要一个头像表,这个表中每个头像和用户表中的每个用户就是一一对应的关系。 一对一关系也存在单向和双向的。首先我们看看单向映射。...使用这种方法建立的底层数据库,和使用ManyToOne是一样的。看一下数据表,就会发现这样建立出来的用户表存在一个外键,指向头像表。

2.1K10

Hibernate @OneToMany 及 @Cascade级联操作

@ManyToOne和@OneToMany 注解 ManyToOne(多对一)单向:不产生中间表,但可以用@Joincolumn(name=" ")来指定生成外键的名字,外键在多的一方表中产生。...OneToMany(一对多)单向:会产生中间表,此时可以用@onetoMany @Joincolumn(name=" ")避免产生中间表,并且指定了外键的名字(别看@joincolumn在一中写着,但它存在在多的那个表中...) OneToMany , ManyToOne 双向(两个注解一起用的):如果不在@OneToMany中加mappedy属性就会产生中间表。...image.png 员工表: ? image.png ★员工已经级联保存,但是员工表中的boss_id却是空,可见级联是直接将set中的对象持久化到数据库,而并没有对关系进行维护(需要手动去维护)。...,同时员工表中的记录也被级联删除。

6.6K21
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JPA 注解学习

    @Temporal 在核心的 Java API 中并没有定义时间精度 ( temporal precision )。因此处理时间类型数据时,你还需要定义将其存储在数据库中所预期的精度。...在数据库中,表示时间类型的数据有 DATE,TIME,和 TIMESTAMP 三种精度 ( 即单纯的日期,时间,或者两者兼备 )。 可使用 @Temporal 注解来调整精度。...双向 规范中多对一端几乎总是双向关联中的主体(owner)端,而一对多的关联注解为 @OneToMany(mappedBy=) @Entity public class Troop { @OneToMany...默认值: 关联表名:主表表名 + 下划线 + 从表表名;关联表到主表的外键:主表表名 + 下划线 + 主表中主键列名;关联表到从表的外键名:主表中用于关联的属性名+ 下划线 + 从表的主键列名。...通常使用惰性加载的方式, @Basic(fetch=FetchType.LAZY) @SecondaryTable @javax.persistence.SecondaryTable 将一个实体映射到多个数据库表中

    3.8K10

    快速学习-JPA中的一对多

    3.2 表关系建立 在一对多关系中,我们习惯把一的一方称之为主表,把多的一方称之为从表。在数据库中建立一对多的关系,需要使用数据库的外键约束。 什么是外键?...指的是从表中有一列,取值参照主表的主键,这一列就是外键。 一对多数据库关系的建立,如下图所示 ?...: 作用:建立一对多的关系映射 属性: targetEntityClass:指定多的多方的类的字节码 mappedBy:指定从表实体类中引用主表对象的名称。...删除主表数据: 有从表数据 1、在默认情况下,它会把外键字段置为null,然后删除主表数据。如果在数据库的表 结构上,外键字段有非空约束,默认情况就会报错了。...3、如果还想删除,使用级联删除引用 没有从表数据引用:随便删 在实际开发中,级联删除请慎用!

    2.4K20

    hibernate 一对一,一对多,多对多关联关系使用

    关系型数据库 关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。...现如今虽然对此模型有一些批评意见,但它还是数据存储的传统标准。标准数据查询语言SQL就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。...情况1-只在多的一方在@ManyToOne注解 one方 package com.example.demo.entity.onetomany; import javax.persistence.Entity...只有ManyToOne列属性 情况2-只在one的一方加 ? 只有一个OneToMany注解 默认情况下是生成了一张关系表。...Java Persistence 2.0 * */ DETACH } fetch属性 FetchType.LAZY:懒加载,加载一个实体时,定义懒加载的属性不会马上从数据库中加载

    6.6K20

    Hibernate框架学习之注解配置关系映射

    这就是一个典型的单向的一对一的关联关系,所谓的一对一其实就是指,主表中的一条记录唯一的对应于从表中的一条记录。但具体到我们的实体类中又该如何来写呢?...这里的@JoinColumn是不一样的,它将生成一个外键字段,但不是生成在本实体类所代表的数据表中,而是生成在被关联的数据表中。...当我们插入数据的时候,会首先分别插入两张表的记录,然后会根据userinfo表中的集合属性中的元素向连接表中进行插入。返回数据也是类似的。...五、双向的一对一的关联关系映射 其实本质上看,单向的关联关系和双向的关联关系的区别在于,单向的关系中,只有一方存在对另一方的引用,也就是可以通过外键列指向另一方,而被引用的一方并不具备指向别人的外键列...答案是: //从usercode查到userinfo表的引用 UserCode userCode = (UserCode) session.get(UserCode.class,1); ?

    2.9K90

    Hibernate 注解配置

    的配置选项,在双向一对多关系中使用,作用和xml映射文件中标签的inverse属性作用相同,在一的一端中设置mappedBy,说明多端反向控制一端。...另外,我们还需要用到@JoinColumn注解,它有一个name属性,用于指定数据库表中的外键列名称。...1.1.2 单向多对一关联 @ManyToOne注解用来配置多对一关系,该注解除了共有属性外还拥有一个叫做optional的配置选项,设置为true时,即使外键为空仍可以向表中添加数据。...、person和board_administrator E-R关系图​ 在数据库中,多对多关系必须借助中间表来完成,版块用户关系表(board_administrator)就是这样一个角色。...在实体类中配置多对多关联关系需要使用@ManyToMany注解,该注解的配置选项和 @OneToMany一模一样。同时通过 @JoinTable 注解描述中间关联表和通过中间表关联到两方的外键。

    97110

    Hibernate关联关系

    从One的一方访问Many的一方(@OneToMany) 1.2.3.2. 从Many的一方查询One的一方(@ManyToOne) 1.2.4. 双向外键关联 1.2.4.1....,不能也从另外一张表访问到这张表的数据。...= null) { session.close(); } } } 从Many的一方查询One的一方(@ManyToOne) 即是通过学生对象查询到宿舍信息,因此需要在学生的实体类中添加宿舍的实体类对象...如果想要通过Many的一方获取One的数据,那么需要在Many的实体类中添加One的实体类的对象为其成员变量,同时在这个成员变量的get方法上使用@ManyToOne这个注解 在双向外键关联,那么我们在使用...@JoinColumn改变外键的字段名,那么必须在One的实体类中使用,因为外键是设置在One的一方的表中 双向外键关联必须使用@OneToMany(mappedBy=)设置主导地位的表,如果不设置这个

    6.9K30

    hibernate的关联与级联

    2、关联的分类:关联可以分为一对一、一对多/多对一、多对多关联 关联是有方向的 关联的关键点都在外键上 如何建立一对多双向关联 以订单和订单项做案例 一个订单对多个订单项,多个订单项对一个订单 在订单实体类中需要添加两个属性...: Set orderItems initOrderItems = 0;//0代表懒加载 1代表立即加载 在订单项的实体类中需要添加一个属性:Order order 定义一对多的关系时需要采用接口方式...A表上的一条数据,可以映射B表的多条数据库,也就是站在A表的角度,就被B表的都跳数据引用, hiberante就认为A表拥有一个B表的集合,所以配置如下 package com.xingxue.entity...,建议手动用代码访问一下关联数据 多对一 多对一实际上就是和一对多站的角度不一样,表之间的关系,如果是一对多,我们换个角度就是多对一,所以一般一对多和多对一都是双向关联配置,还是Admin和role为例...需要手动开启 @ManyToOne(fetch=FetchType.LAZY) 多对多 hibernate多对多当中,我们常常希望只删除一方已及对应的关系,但不想删除另一方 表user和表role多对多

    1.7K10

    高级框架-springDate-JPA 第二天【悟空教程】

    ,它被引用在@GeneratedValue 中设置的“generator”值中 String name(); //表示表生成策略所持久化的表名,例如,这里表使用的是数据库中的“tb_generator...: 作用: 建立一对多的关系映射 属性: targetEntityClass:指定多的多方的类的字节码 mappedBy:指定从表实体类中引用主表对象的名称。...* 删除主表数据: * 有从表数据引用 * 1、在默认情况下,它会把外键字段置为 null,然后删除主表数据。 * 如果在数据库的表结构上,外键字段有非空约束,默认情况就会报错了。...* 3、如果还想删除,使用级联删除 * 没有从表数据引用:随便删 * 在实际开发中,级联删除请慎用!...* 删除主表数据: * 有从表数据引用 * 1、不能删除 * 2、如果还想删除,使用级联删除 * 没有从表数据引用:随便删 * 在实际开发中,级联删除请慎用!

    3K10

    MyBatis一对多,多对一(图文并茂)

    (在一方有一个多的集合)看懂了,很重要,很重要,很重要 数据库 数据库设计:一个班级有多个学生,在学生里有一个班级的外键classid 对应的实体类 Class实体类 package com.imooc.onetomany...,注意写全类名 4) select 属性是调用哪个接口里的哪个方法,此文章中是调用com.imooc.onetomany包下的StudentMapper类的selectStudentByClassId方法...(在多的一方有一个一的属性)看懂了,很重要,很重要,很重要 数据库设计 数据库解释:在多的一方有一个一的外键  实体类 City多方 package com.imooc.manytoone; public...:3张表,一张关系表,都懂哈 我也百度了一些博客,总的思路就是:多个一对多就是多对多 这里没有什么标签,就是两个步骤: 1 修改xxxMapper.xml中的resultMap 2 在select标签中写...SQL语句(多表查询的语句,没巧方法),  select xxx  from table1,table2,table3 where 巴拉巴拉,注意与resultMap中对应

    36110

    EJB的资料辅导(6)

    //用来指定根据类关系映射到表后和其他表关联的列名,以及关联的列名,以及本列的属性 name属性指定类中属性对应的列名,默认为属性名 referencedColumnName属性指定类对应的表中的关联引用的列的列名...nullable属性指定类中属性对应的列是否可空,默认为true updateable="true|false"属性指定类中该属性是否会出现在update语句中,也就是会不会被修改,默认为true可以被修改...table属性指定类中有关联属性的列所对应的表,默认为实体类所对应的表。...@PrimaryKeyJoinColumn主键关联 例:   引用外键     @OneToOne(optional=false)     @JoinColumn(name="CUSTREC_ID",...            mappedBy="customer")     public Set getOrders() { return orders; }     In Order class:     @ManyToOne

    8710

    Elixir and Pylons 中多态继承和自关联关系的创建

    一、问题背景一位初学者在 Elixir 和 Pylons 中创建一个 Wiki 项目,并按照 Pylons 文档中的示例重写了 Wiki 的数据库架构。...在 Wiki 中,有一个 Navigation(导航)表,由 Pages(页面)和 Sections(章节)继承。一个章节可以有多个页面,而一个页面只能属于一个章节。此外,每个兄弟节点可以相互引用。...('Comment') section = ManyToOne('Nav', inverse='section')​class Section(Nav): using_options(inheritance...2、在 Nav 表中,将 before 字段的类型从 OneToMany 更改为 ManyToMany,如下:class Nav(Entity): using_options(inheritance...,将 before 字段的类型从 OneToMany 更改为 ManyToMany,如下:class Nav(Entity): using_options(inheritance='multi')

    53610

    Hibernate检索策略

    以下是Hibernate中常用的几种检索策略:EAGER(急加载):当使用急加载策略时,Hibernate会立即检索与查询相关联的所有实体对象。这意味着在查询结果中包含所有关联实体的完整数据。...这种策略适用于需要立即访问关联数据的场景。例如,考虑一个图书和作者之间的关系,使用急加载策略将检索图书和其对应的作者信息。...这意味着在查询结果中只包含主实体对象的数据,而关联实体对象的数据将在需要时动态加载。这种策略适用于关联数据较多或较大的情况,可以提高性能和减少不必要的数据库查询。...@ManyToOne(fetch = FetchType.LAZY) private Author author; // ...}BATCH(批量加载):批量加载策略用于在单个查询中批量加载多个实体对象...@OneToMany(fetch = FetchType.LAZY) @BatchSize(size = 10) private List books; // ..

    64440

    Java一分钟之-JPA实体关系:一对一, 一对多, 多对多

    本文将深入浅出地探讨JPA中的三种基本实体关系类型:一对一、一对多、多对多,揭示常见问题、易错点及其避免策略,并附上简洁的代码示例。...常见问题与避免策略问题1:循环引用导致序列化问题避免策略:使用@JsonIgnore或@JsonBackReference/@JsonManagedReference注解解决JSON序列化时的循环引用问题...常见问题与避免策略问题1:中间表忽略避免策略:明确定义关联表(@JoinTable),并处理好关联关系的维护端。...问题2:双向关联更新不一致避免策略:确保双向关联时,双方都正确维护关联状态,或指定一方为主导方。...courses") private Set students = new HashSet(); // 省略getter和setter}总结JPA实体关系映射是实现对象与数据库表间转换的关键

    1.7K10

    快速学习-Spring Data JPA中的多表查询

    第5章 Spring Data JPA中的多表查询 5.1 对象导航查询 对象图导航检索方式是根据已经加载的对象,导航到他的关联对象。它利用类与类之间的关系来检索对象。...配置方式: /** * 在客户对象的@OneToMany注解中添加fetch属性 * FetchType.EAGER :立即加载 * FetchType.LAZY :延迟加载...*/ @OneToMany(mappedBy="customer",fetch=FetchType.EAGER) private Set linkMans = new HashSet...通过配置的方式来设定,只要查询从表实体,就把主表实体对象同时查出来 配置方式 /** * 在联系人对象的@ManyToOne注解中添加fetch属性 * FetchType.EAGER :...立即加载 * FetchType.LAZY :延迟加载 */ @ManyToOne(targetEntity=Customer.class,fetch=FetchType.EAGER)

    2.9K10
    领券