JPA学习笔记 - 关联关系

OneToMany: 指定 1对多 的映射关系(可通过fetch的属性设置加载方式)
JoinColmn: 指定外键的列名(外键存在于 多 的一方表中)


单向 n-1 : 
先保存n的一端时,会多出update语句,因为插入n端时并未知道外键的值,插入1的一端后update外键;
先保存1的一端时,没有update语句;
默认对关联的一方使用EAGER急加载;


单向 1-n :
保存时一定会多出update语句,因为n的一端插入时不会同时插入外键;
删除 1 的一端,先把 n 的一端外键set null,再删除(可通过OneToMany.cascade修改级联)
默认对关联的一方使用LAZY懒加载; 


双向 1-n :
分别为两个对象的指定映射关系,就开启了双向。注意的是外键名必须一致
双向 1-n :保存时:
先保存 1 的一端,会多出N条update语句(1端维护关联关系时发出的);
先保存 n 的一端时,再保存 1 的一端,会出现2*N条update语句(1和n端各update一次),因为 1 的一端未保存,并未知道外键是多少;
在双向 1-n 中,建议使用 n 的一方维护关联关系,而 1 的一方不维护关联关系,这样会有效减少sql语句,提升性能。不维护关联关系:设置 1 的一端@OneToMany的mappedBy;如:mappedBy="user" 表示由 n 的一方的user属性维护;
注意:若 1 的一端使用了mappedBy属性,1的一端就不能使用@JoinColumn


双向 1-1:
建议先保存不维护关联关系的一方,会减少sql。
建议不修改不维护关联关系一方的fetch属性。(因为延迟加载也是使用联表查询,且会发出2条sql,一条查一个对象)
默认EAGER急加载;
若查询双方的其中一方,会通过左外连接一并获取关联的另一方对象;(可通过fetch属性改变加载策略)


双向 n-n :
默认LAZY懒加载,无论是否维护关系一方;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值