Java 带有CascadeType.ALL的JPA外键约束

Java 带有CascadeType.ALL的JPA外键约束,java,spring,hibernate,spring-data-jpa,Java,Spring,Hibernate,Spring Data Jpa,我有两个实体 这是第一个实体 public class Manager { // ... @OneToMany(mappedBy = "manager", cascade = CascadeType.ALL) @LazyCollection(LazyCollectionOption.FALSE) private List<ExpertAndRequest> requests; // ... } 所以我从表中删除了数据 this.man

我有两个实体

这是第一个实体

public class Manager {

    // ...

    @OneToMany(mappedBy = "manager", cascade = CascadeType.ALL)
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<ExpertAndRequest> requests;

    // ...

}
所以我从表中删除了数据

this.managerRepository.delete(manager);        
我得到一个例外:

org.h2.jdbc.JdbcSQLException: Referential integrity constraint violation
我做错了什么


编辑

我更新了上面的课程

这是我的班级

@Data
public class ExpertAndRequestId implements Serializable {

    private long managerId;
    private long requestId;


    public int hashCode() {
        return (int)(managerId + requestId);
    }

    public String toString() {

        return String.format("ExpertAndRequestId [expert = \"%s\", request=\"%s\"]", this.managerId, this.requestId);

    }

    public boolean equals(Object object) {
        if (object instanceof ExpertAndRequestId) {
            ExpertAndRequestId otherId = (ExpertAndRequestId) object;
            return (otherId.requestId == this.requestId) && (otherId.managerId == this.managerId);
        }
        return false;
    }

}
第三实体

public class ParticipantRequest {

    // ...

    @OneToMany(mappedBy = "request", cascade = CascadeType.ALL)
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<ExpertAndRequest> experts;

    // ...

}
public class participantruest{
// ...
@OneToMany(mappedBy=“request”,cascade=CascadeType.ALL)
@LazyCollection(LazyCollectionOption.FALSE)
私人名单专家;
// ...
}

我从

try
cascade={CascadeType.PERSIST,CascadeType.MERGE}中获取的示例
而不是
cascade=CascadeType.ALL
并作为参考。

因为父实体
Manager
和子实体
ExpertAndRequest
之间存在双向关系,所以您需要的是
CascadeType.REMOVE
(或CascadeType.ALL,包括REMOVE):您说休眠“如果父实体已删除,请同时删除子实体”。 学习如何使用
CascadeType.REMOVE
orphandremove

public class ParticipantRequest {

    // ...

    @OneToMany(mappedBy = "request", cascade = CascadeType.ALL)
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<ExpertAndRequest> experts;

    // ...

}