【发布时间】:2021-05-09 14:48:39
【问题描述】:
我有两个映射实体,AssignmentOpsEntity 和 ConventionalOptionEntity。我想删除带有所有conventionalOption 的AssignmentOpsEntity。所以我从AssignmentOpsEntity 中删除了所有conventionalOption,然后我从数据库中删除了conventionalOption,最后我删除了对象AssignmentOpsEntity。但我有以下错误。
错误:更新或删除表“assignmentopsentity”违反 表上的外键约束“fkll31qdog9ye067ybhltjey6u7” “conventionaloptionentity”详细信息:键 (assignmentopsid)=(8bf4a6b3-c09e-4da1-a88d-d49d9f7b63f6) 仍然 引用自表“conventionaloptionentity”。
@Entity
public class AssignmentOpsEntity {
@OneToMany(mappedBy = "assignmentOps", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Set<ConventionalOptionEntity> conventionalOption;
public void removeConventionalOption(Set<ConventionalOptionEntity> conventionalOption) {
this.conventionalOption.removeAll(conventionalOption);
conventionalOption.forEach(item -> item.assignmentOps(null));
}
}
@Entity
public class ConventionalOptionEntity {
@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY)
private AssignmentOpsEntity assignmentOps;
}
public void on(OpsDetachedFromAgreementEvent event) {
Optional<AssignmentOpsEntity> assignmentOpsEntityOptional = assignmentOpsRepository.findById(event.assignmentOpsId);
if (assignmentOpsEntityOptional.isPresent()) {
AssignmentOpsEntity assignmentOpsEntity = assignmentOpsEntityOptional.get();
assignmentOpsEntity.removeConventionalOption(assignmentOpsEntity.getConventionalOption());
conventionalOptionRepository.deleteAll(assignmentOpsEntity.getConventionalOption());
assignmentOpsRepository.delete(assignmentOpsEntity);
}
}
【问题讨论】:
标签: spring hibernate jpa spring-data one-to-many