java - 删除中间实体时级联删除无法正常工作

标签 java hibernate

我有 3 个实体:爷爷、父亲和 child ,具有预期的关系 爷爷有很多父亲,父亲有很多 child

@Entity
@Table(name = "Grandpa")
public class Grandpa {
     @Id
     @GeneratedValue(generator = "increment")
     @GenericGenerator(name = "increment", strategy = "increment")
     @Column(name = "id")
     private int id;

     @CreationTimestamp
     @Temporal(TemporalType.TIMESTAMP)
     @Column(name = "created_at")
     private Date createdAt;

     @UpdateTimestamp
     @Temporal(TemporalType.TIMESTAMP)
     @Column(name = "updated_at")
     private Date updatedAt;

     @OneToMany(cascade = {CascadeType.ALL}, mappedBy = "grandpa")
     private Set<Father> children = new HashSet<Father>(0);

     ....
}


@Entity
@Table(name = "Father")
public class Father {
    @Id
    @GeneratedValue(generator = "increment")
    @GenericGenerator(name = "increment", strategy = "increment")
    @Column(name = "id")
    private int id;

    @CreationTimestamp
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "created_at")
    private Date createdAt;

    @UpdateTimestamp
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "updated_at")
    private Date updatedAt;

    @OneToOne(cascade = {CascadeType.ALL})
    private Grandpa grandpa;

    @OneToMany(cascade = {CascadeType.ALL}, mappedBy = "father")
    private Set<Child> children = new HashSet<Child>(0);

    ....
}



@Entity
@Table(name = "Child")
public class Child {
    @Id
    @GeneratedValue(generator = "increment")
    @GenericGenerator(name = "increment", strategy = "increment")
    @Column(name = "id")
    private int id;

    @CreationTimestamp
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "created_at")
    private Date createdAt;

    @UpdateTimestamp
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "updated_at")
    private Date updatedAt;

    @OneToOne(cascade = {CascadeType.ALL})
    private Father father;
}

当我删除爷爷时,他所有的父亲和 child 也会被删除,但是当我删除父亲时,他的 child 仍保留在数据库中

我错过了什么?

最佳答案

发现问题...

在实现删除爷爷时,我使用了 session.delete(object) 在实现删除Father时我使用了纯sql...

关于java - 删除中间实体时级联删除无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44409258/

相关文章:

java - 使用 spring jpa 逐行获取数据库

java - 如何使用带有 Spring-Boot JPA 和 Maven 的 Liquibase 来管理来自 JPA 实体的迁移

java - PipedInputStream.java 的设计中是否存在错误或者我误解了它的设计?

Java 线程同步,最佳并发实用程序,读取操作

java - Hibernate 自引用父子

java - 当我添加 @Async 时,entityManager.flush() 将引发异常

Java RPN (Reverse Polish Notation) 中缀到后缀

java - 如何在 block 内初始化变量?

hibernate - 使用 HibernateTemplate 的多值 Mysql 插入

mysql - 更新数据库表的有效方法