Hibernate - 删除子项时如何从父项中删除实体

Posted

技术标签:

【中文标题】Hibernate - 删除子项时如何从父项中删除实体【英文标题】:Hibernate - How to remove entity from parent when deleting child 【发布时间】:2019-01-28 14:51:10 【问题描述】:

以下代码不起作用

        User user = new User();
        Project project = new Project();
        project.setOwner(user);

        projectRepository.delete(project);

        assertEquals(0, user.getProjects().size());

我应该如何配置关联以实现此目的?

目前我有

public class User 
    @OneToMany(mappedBy = "owner")
    private Set<Project> projects = new HashSet<Project>();

public class Project 
    @ManyToOne
    private User owner;

测试返回

java.lang.AssertionError: 
Expected :0
Actual   :1

【问题讨论】:

【参考方案1】:

在一对多关系中,您应该从父级级联删除到子级,而不是相反。如果您有 3 个属于同一用户的项目,您的场景会发生什么?您删除了其中一个项目,但您不能删除用户,对吗?因为他还有 2 个项目。

查看这篇关于该主题的精彩文章: https://vladmihalcea.com/a-beginners-guide-to-jpa-and-hibernate-cascade-types/ (作者其实在这里回答了很多关于hibenrate的问题)

【讨论】:

我不想级联删除。我想从用户列表中删除项目,但用户仍然需要存在。我想避免从所有指向项目的 OneToMany 中删除。

以上是关于Hibernate - 删除子项时如何从父项中删除实体的主要内容,如果未能解决你的问题,请参考以下文章

在JPA中删除子项时保持实体关系同步

JPA / Hibernate - 删除子项删除父项(从同一个表)

如何反映从父项到子项的变化

如何在使用Hibernate删除父项时删除所有子行?

用于从 LastOrDefault 父项中查找子项的实体框架 LINQ

使用 Composition API 在 Vue 中处理子项和父项中的提交事件