Hibernate 级联cascade简介

版权声明:本文为博主原创文章,转载请注明作者和出处,如有错误,望不吝赐教。 https://blog.csdn.net/weixin_41888813/article/details/83012430

什么是级联?

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

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


/**
     * (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

猜你喜欢

转载自blog.csdn.net/weixin_41888813/article/details/83012430