jpaday3

单向一对多

单向一对多用得比较少(性能差),但是依然必须掌握,因为我们在使用双向一对多还会用到单向一对多的相应配置。

映射配置

在这里插入图片描述

单向一对多(性能太差)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
无论不管怎么保存(改变persist代码位置)
它都会至少执行5条SQL语句完成保存功能
而完成同样的功能,我们使用单向多对一可以优化为3条。 因此,我们一般不使用单向一对多(原因:性能太差)

延迟加载
默认懒加载
在这里插入图片描述
可以在注解里面设置 ,但是迫切加载还耗性能
这个fetch的值默认为FetchType.LAZY,则实现延时加载,
而我们修改成FetchType.EAGER后,不管有没有找类型项目的商品,它都会马上发送SQL来去查询数据。
在配置映射关系的时候如果是@ManyToOne(fetch=FetchType.LAZY),@OneToMany(fetch=FetchType.LAZY) ,@ManyToMany(fetch=FetchType.LAZY) 都是默认使用延迟加载提高性能的。
只有Many在后面都是使用延迟加载获取数据。

判断集合是否有值
在这里插入图片描述多态
在这里插入图片描述
采用多态的写法 从分类获取产品
PersistentSet 它实现接口Set HashSet也实现Set接口
HashSet? --》org.hibernate.collection.internal.PersistentSet 它是Set的实现类
HashSet 和PresistentSet它是兄弟关系 ,不是父子关系 ,一句 在实体类定义 使用Set接口
PersistentBag 是底层给我实现接口实现类 它是List的实现类 PersistentBag它和ArrayList也是兄弟关系
在定义的时候 使用接口比如List和Set
在这里插入图片描述

双向多对一/双向一对多

前言:添加数据的时候我们选择比较多,因为现在是双向的,所以在添加的时候有多种选择。
选择一:在java代码中让多方来维护关系(性能高),类似于单向多对一
选择二:在java 代码中让一方来维护关系(性能低-如下面的代码),类似于单向一对多。
使一方放弃维护
一般是交给多方来来维护
在这里插入图片描述

级联保存

比较危险

目的 :
我们想要达到一个什么效果呢?
我们直接保存商品类别(ProductDir,一方),就把它对应的商品(Product,多方)也一起保存起来!

配置中间表
在这里插入图片描述
在这里插入图片描述查询

删除的时候比较危险 ,可以在维护的一方选择想要的配置避免删除过多的数据
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

单向多对多

我们保存三个用户(user),两个角色(role)来进来多对多的测试
一个用户拥有多个角色
反过来一个角色也可以拥有多个用户
相当于2个多对一叠加变成多对多,多了一张中间表user_role
单向:用户可以找到多个角色

在这里插入图片描述
同样配置中间表
保存数据
创建两个用户三个角色
在这里插入图片描述
在这里插入图片描述
中间表数据
在这里插入图片描述

双向多对多

双向多对多就是配置两个多对多即可,我们直接用练习来完成双向多对多的学习
多对多的操作->都是符合开发时的正常操作

1.级联保存
2.删除user1(由JPA自动处理,先删除中间表,在删除user1)
user必须要管理中间表的权限,没有在user这个配置mappedBy修改角色:先删除在添加
user必须要管理中间表的权限,没有在user这个配置mappedBy
关系user1(role1,role2)->关系user1(role1,role3)
3.级联删除(一边配置,危险)
4.级联删除(二边配置,非常危险)

在两边配置信息
在这里插入图片描述
在这里插入图片描述
删除用户数据

在这里插入图片描述如果有级联会把删除关联的数据全部删除
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
比如删除用户2
而用户2里面有三个角色
这是会把用户2和三个角色一起删除掉
导致三张表里面只剩下 用户表里id为1的用户
其余的数据全部被删除
非常危险

如果没有级联
就只会删除中间表数据和当前删除的用户

一对一

使用相对较少,但依然要掌握

在这里插入图片描述在这里插入图片描述把QQ的主键付给QQ空间外键 并且唯一,达到只能通过唯一的ID进入到固定的QQ空间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值