删除没有JPA映射的1:1父窗体子实体



在删除子实体时,我需要删除任何关联的父实体,反之亦然。但出于"性能"的原因,所有者没有在实体中包含任何类型的JPA映射。如果在删除子对象之前先手动删除父对象,则会由于FK约束而失败,反之亦然。有人能帮忙吗?实体:

@Table(name = "child_node")
public class ChildNodeEntity {
@Id
private Long id;
@Column(name = "case_id")
private String caseId;
@Column(name = "parent_id", updatable = false)
private String parentId;
}
@Table(name = "parent_node")
public class ParentNodeEntity {
@Id
private Long id;
@Column(name = "case_id")
private String caseId;
}

在子实体中,parentId保持为String(为了避免性能问题,加上在项目中的任何地方都没有使用父对象(。

这是从孩子中删除父母的代码:

@Transactional
private void deleteBauCase(String caseId) {
ChildNodeEntity child = service.getChildNodeEntityById(caseId);
ParentNodeEntity parent = service.getParentNodeEntityById(caseId);
parentNodeRepository.delete(parent);
childNodeRepository.delete(child);
}

应该如何删除这两个实体?反之亦然(从父项中删除子项(。我无法使用@OnetoOne映射和级联删除。有其他方法可以执行吗?外键约束在数据库端。请帮忙,因为我只熟悉使用注释。

解决了它!

事实证明,代码很好(尽管有点糟糕和不标准(。

问题在于DB上的外键约束。默认情况下,on delete设置为no action。我只需要把它改成set null

最新更新