用到的注解
注意:一对多中 一的一方默认是懒加载 多的一方默认是迫切加载
一对多中
- @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方,多方干掉