JPA关系

用到的注解

注意:一对多中 一的一方默认是懒加载 多的一方默认是迫切加载

一对多中

  • @JoinColumn(name = “dept_id”)
    申明外键的列名
  • @OrderBy(“name desc”)
    用于排序
  • @OneToMany(mappedBy = “school”)
    一方放弃关系的维护由对方的某个属性来维护外键的关系
    我当前方放弃关系的维护,由对方domain中的school属性来维护关系了
  • @OneToMany(cascade = CascadeType.ALL,orphanRemoval = true)
    • cascade = CascadeType.PERSIST:级联保存
      保存1方,多方一并保存 前提: 多方和一方都要维护彼此关系
    • cascade = CascadeType.REMOVE
    • cascade = CascadeType.ALL

拥有级联添加和级联修改还有级联删除
如果级联删除用到的话,还不够,我们一般喜欢使用最强级联,你还得配置一个信息叫做
orphanRemoval = true 孤儿删除

注意:以后大家使用级联删除的时候,一定要慎用,一不小心数据全部删完

多对多中

  • @JoinTable(name = “user_role”,joinColumns =@JoinColumn(name=“user_id”),
    name = "user_role" 中间表对应的表名
    joinColumns =@JoinColumn(name="user_id") 本方domain在中间表对应的列名
    inverseJoinColumns = @JoinColumn(name="role_id") 对方domain在中间表对应的列名

一对多

单向一对多

为什么单向一对多总是用的少

答:因为性能太低了,因为保存数据的时候,不管先保存1方还是多方都要多发送sql语句一方根本就不擅长关系的维护
怎么优化
请使用双向一对多

注意事项:以后大家在对象中申明关联对象是集合的时候,一定要用接口申明 不能使用实现类申明,否则立马挂掉

双向多对一

先保存1方,再保存多方 1方再发送2条sql语句去维护关系

先保存多方,再保存1方 2条脏数据更新,2条sql语句来自于1方维护关系

从上面这个列子我们可以看出,1方根本就不适合维护关系,维护关系,还得交给多方维护
得出一个结论: 保存数据的时候永远先保存1方,再保存多方,性能最好

级联

如果要使用级联保存,必须双方都要维护关联对象

//一方维护多方目的: 它拥有级联保存多方
order.getItems().add(item1);
order.getItems().add(item2);
//多方维护一方的目的: 让外键有值
item1.setOrder(order);
item2.setOrder(order);

孤儿删除

特点:能保留1方,多方干掉

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值