ManyToOne关系中的级联式删除

时间:2017-06-12 12:36:22

标签: postgresql hibernate

我在@ManyToOneWorkpackage之间有一个Project关系。项目可以包含一到多个工作包。

我的Workpackage实体引用了Project这样的实体:

@NotNull
@ManyToOne(targetEntity = ProjectEntity.class)
private ProjectEntity project;

因此,Workpackage表中的每一行都引用了某个项目的id

但是当我尝试删除一个项目时,我得到一个外键约束(这是有道理的,因为我的工作包依赖于一个项目,并且应该在删除前者之前删除它。)

cascade = CascadeType.REMOVE因为我删除了我的项目而不是我的Workpackage而无法工作。有没有办法在删除某个项目时删除与某个项目相关的Workpackage

Hibernate不熟悉,除了浏览每个Workpackage并逐个删除它们之外,没有任何明显的想法。

1 个答案:

答案 0 :(得分:0)

ON DELETE CASCADE :如果删除表Project中的项目行,引擎将删除相关的workPackages。这可用于在辅助表上进行自动清理。

  1. 声明架构时,请执行以下操作

    alter table Workpackage add constraint constraintName foreign key (id) references Project(id) on delete cascade

  2. 您必须明确将子对象设置为null。

    for (Workpackage child : project.getWorkpackages()) { child.setProject(null); } session.delete(OwningSide);