欢迎您光临本站
首页 > JAVA > 正文
faddei头像
faddei

2021-08-05

评论者
JAVA
0 1
子表:
@OneToMany(mappedBy = "entryBill", cascade = arrayOf(CascadeType.PERSIST,
CascadeType.REMOVE))
var details: MutableList<EntryBillDetail>? = ArrayList(),
子表:
@ManyToOne
@JoinColumn(name = "entry_bill_id")
var entryBill: EntryBill? = null,


mappedBy: 
1>只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性; 
2>mappedBy标签一定是定义在被拥有方的,他指向拥有方; 
3>mappedBy的含义,应该理解为,拥有方能够自动维护跟被拥有方的关系,当然,如果从被拥有方,通过手工强行来维护拥有方的关系也是可以做到的; 
4>mappedBy跟joinColumn/JoinTable总是处于互斥的一方,可以理解为正是由于拥有方的关联被拥有方的字段存在,拥有方才拥有了被拥有方。mappedBy这方定义JoinColumn/JoinTable总是失效的,不会建立对应的字段或者表。 


cascade:关系标记(级联操作)

CascadeType.REMOVE

Cascade remove operation,级联删除操作。

删除当前实体时,与它有映射关系的实体也会跟着被删除。

CascadeType.MERGE

Cascade merge operation,级联更新(合并)操作。

当Student中的数据改变,会相应地更新Course中的数据。

CascadeType.DETACH

Cascade detach operation,级联脱管/游离操作。

如果你要删除一个实体,但是它有外键无法删除,你就需要这个级联权限了。它会撤销所有相关的外键关联。

CascadeType.REFRESH

Cascade refresh operation,级联刷新操作。

假设场景 有一个订单,订单里面关联了许多商品,这个订单可以被很多人操作,那么这个时候A对此订单和关联的商品进行了修改,与此同时,B也进行了相同的操作,但是B先一步比A保存了数据,那么当A保存数据的时候,就需要先刷新订单信息及关联的商品信息后,再将订单及商品保存。(来自良心会痛的评论)

CascadeType.ALL

Cascade all operations,清晰明确,拥有以上所有级联操作权限。


版权声明:本站所提供的文章、图片等内容均为用户发布或互联网整理而来,仅供学习参考,如有侵犯您的版权,请联系我们客服人员删除。

253

精彩推荐

暂无评论

文明用语