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;
// ...
}