我在@ManyToOne
和Workpackage
之间有一个Project
关系。项目可以包含一到多个工作包。
我的Workpackage
实体引用了Project
这样的实体:
@NotNull
@ManyToOne(targetEntity = ProjectEntity.class)
private ProjectEntity project;
因此,Workpackage
表中的每一行都引用了某个项目的id
。
但是当我尝试删除一个项目时,我得到一个外键约束(这是有道理的,因为我的工作包依赖于一个项目,并且应该在删除前者之前删除它。)
但cascade = CascadeType.REMOVE
因为我删除了我的项目而不是我的Workpackage
而无法工作。有没有办法在删除某个项目时删除与某个项目相关的Workpackage
?
对Hibernate
不熟悉,除了浏览每个Workpackage
并逐个删除它们之外,没有任何明显的想法。
答案 0 :(得分:0)
ON DELETE CASCADE :如果删除表Project中的项目行,引擎将删除相关的workPackages。这可用于在辅助表上进行自动清理。
声明架构时,请执行以下操作
alter table Workpackage add constraint constraintName
foreign key (id) references Project(id) on delete cascade
您必须明确将子对象设置为null。
for (Workpackage child : project.getWorkpackages()) {
child.setProject(null);
}
session.delete(OwningSide);