Hibernate 级联cascade简介

什么是级联?

简单的说,没有配置级联的时候,删除分类,其对应的产品不会被删除。

但是如果配置了恰当的级联,那么删除分类的时候,其对应的产品都会被删除掉。

 


/**
     * (Optional) The operations that must be cascaded to
     * the target of the association.
     *
     * <p> By default no operations are cascaded.
     */
    CascadeType[] cascade() default {};

谷歌翻译对注释的翻译:必须级联到关联目标的操作。默认情况下没有级联操作。

这里解释一下,级联的意思是:

  • 本实体做了什么事,也要拉上 另一个关联的实体,导致另一个实体跟着做事情。就是说我删除了,你也得删除!

  • 关联目标,指的是 关联的那个实体。


注:级联通常用在one-many和many-to-many上,几乎不用在many-one上。

在有中间关系表的情况下,比如 user/role/user_role 这三张表,只对应User/Role两个实体对象就够了!中间表是由User对象或者Role对象维护的,不用另外新建user_role的实体!

user表              ——          id name

role表               ——          id name

user_role表     ——          user_id role_id

@Entity
@Table(name = "user")
public class User
{
    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "user_role", joinColumns = {@JoinColumn(name= "user_id")}, inverseJoinColumns = {@JoinColumn(name = "role_id")})
    private Set<Role> roles;

}
@Entity
@Table(name = "role")
public class Role
{
    @ManyToMany(fetch= FetchType.LAZY)
    @JoinTable(name = "user_role", joinColumns = {@JoinColumn(name= "role_id")}, inverseJoinColumns = {@JoinColumn(name = "user_id")})
    private Set<User> users;

}

CascadeType枚举源码:

/**
 * Defines the set of cascadable operations that are propagated
 * to the associated entity.
 * The value <code>cascade=ALL</code> is equivalent to
 * <code>cascade={PERSIST, MERGE, REMOVE, REFRESH, DETACH}</code>.
 *
 * @since Java Persistence 1.0
 */
public enum CascadeType {

    /** Cascade all operations 级联所有操作 */
    ALL,

    /** Cascade persist operation 级联新增 */
    PERSIST,

    /** Cascade merge operation 级联更新或者新增 */
    MERGE,

    /** Cascade remove operation 级联删除 */
    REMOVE,

    /** Cascade refresh operation 级联刷新 */
    REFRESH,

    /**
     * Cascade detach operation
     * 级联分离
     * @since Java Persistence 2.0
     *
     */
    DETACH  
}

 


参考来源于:

http://how2j.cn/k/hibernate/hibernate-cascade/1053.html

https://www.cnblogs.com/hdwang/p/7241043.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值