Postgresql 多通关系上的级联式删除
我在Postgresql 多通关系上的级联式删除,postgresql,hibernate,Postgresql,Hibernate,我在工作包s和项目s之间有一个@manytone关系。其中一个项目可以有一对多个工作包 我的工作包实体指的是项目类似的实体: @NotNull @ManyToOne(targetEntity = ProjectEntity.class) private ProjectEntity project; 因此,我的工作包表中的每一行都引用某个项目的id 但是当我试图删除一个项目时,我得到了一个外键约束(这是有意义的,因为我的工作包依赖于一个项目,应该在删除前者之前删除) 但是cascade=Casc
工作包
s和项目
s之间有一个@manytone
关系。其中一个项目可以有一对多个工作包
我的工作包
实体指的是项目
类似的实体:
@NotNull
@ManyToOne(targetEntity = ProjectEntity.class)
private ProjectEntity project;
因此,我的工作包
表中的每一行都引用某个项目的id
但是当我试图删除一个项目时,我得到了一个外键约束(这是有意义的,因为我的工作包依赖于一个项目,应该在删除前者之前删除)
但是cascade=CascadeType.REMOVE将不起作用,因为我正在删除我的项目,而不是我的工作包。是否有方法在删除某个项目时删除与该项目相关的工作包
作为Hibernate
的新手,除了浏览每个工作包
并逐个删除它们之外,没有什么明显的事情会浮现在脑海中。关于删除级联:如果删除项目表中的项目行,引擎将同时删除相关的工作包。这可用于对辅助表进行自动清理
声明架构时,请执行以下操作
alter table工作包添加约束constraintName
外键(id)引用删除级联上的项目(id)
您必须显式地将子对象设置为null
(工作包子项:project.getWorkpackages())的{
setProject(null);
}
删除(OwningSide)代码>
如何通过Hibernate
实现这一点?我不确定我是否理解您的两点。请在hibernate中单独遵循第二点来执行此操作,在删除项目之前,检索所有工作包并将项目显式设置为null。Hibernate确保在删除项目时,它会自动删除工作包,