java hibernate 级联cascade和控制反转inverse

@OneToMany(mappedBy = "order", fetch = FetchType.LAZY, cascade = {CascadeType.REMOVE})
@OrderBy("createDate asc")
public Set<OrderLog> getOrderLogSet() {
return orderLogSet;
}

1、关于mappedBy的含义:
a) 只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性;
b) mappedBy标签一定是定义在the owned side(被拥有方的),他指向the owning side(拥有方);
c) mappedBy的含义,应该理解为,拥有方能够自动维护跟被拥有方的关系;
当然,如果从被拥有方,通过手工强行来维护拥有方的关系也是可以做到的。

级联一般用在OneToOne和OneToMany上,
这也是hibernate官方的推荐,有时候我们在开发中也用在
ManyToOne,ManyToMany上,
hibernate的关联关系,重点在理解级联cascade和inverse
1、cascade一般用在级联保存,级联更新,级联删除上
ALL,

PERSIST,调用session.persist()时触发
MERGE,调用session.merge()触发
REMOVE,调用session.delete()触发
REFRESH,
DETACH

由于hibernate的关联关系,重点在理解级联cascade和inverse,故补充inverse
inverse,英文意思是反向,反转。在这里可以理解为控制反转,
也就是说实体间的关系由谁控制,
所以inverse用在实体关联上。如OneToOne,OneToMany,ManyToMany

在OneToMany中,如果不指定inverse,那么hibernate会去找默认的表来维持关系。
例如用老师和课程两个实体来说明,假设teacher和course是OneToMany的关系,

配置如下:

//通过外键teacher_id关联teacher,inverse通过mappedBy来设置

@ManyToOne(cascade={CascadeType.MERGE})
@JoinColumn(name = "teacher_id")

private Teacher teacher;


@OneToMany(mappedBy="teacher",fetch=FetchType.LAZY,
cascade={CascadeType.MERGE,CascadeType.REMOVE})

private Set<Course> courses = new HashSet<Course>();

在这里指定teacher的属性courses的关系由关联实体Course的teacher属性维持,
如果不配置,则会去找关联表teacher_course来维持关系。
OneToOne和ManyToMany大同小异
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值