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方,多方干掉

发布了54 篇原创文章 · 获赞 9 · 访问量 851

猜你喜欢

转载自blog.csdn.net/qq_40629521/article/details/104012561
今日推荐