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 / Hibernate - 删除子项删除父项(从同一个表)