gpt4 book ai didi

java - JPA OneToMany - 删除最后一个子项时删除父项

转载 作者:行者123 更新时间:2023-12-01 04:55:50 25 4
gpt4 key购买 nike

我与 @ManyToOne 子级有一个 @OneToMany 双向关系。 children 站在拥有方。

我想根据用户命令通过父级单独删除子级,如果删除最后一个子级,则删除父级。

Parent.java

@OneToMany(fetch = FetchType.EAGER, mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Child> children;
...

Child.java

@ManyToOne(fetch = FetchType.EAGER)
private Parent parent;
...

void remove(Parent parent, Child child) {
for(Child c : parent.getChildren()){
if(c.equals(child)){
parent.getChildren().remove(c);
break;
}
}

if(parent.getChildren().isEmpty()){
parentService.remove(parent); // *1
} else {
parentService.update(parent); // *2
}
}

标记*2处的更新工作正常。但是,当找到最后一条记录并且执行标记为 *1 的行中的代码时,我收到此异常:

org.springframework.dao.InvalidDataAccessApiUsageException: Removing a detached instance com.package.etc.Parent#18374850; 

nested exception is java.lang.IllegalArgumentException: Removing a detached instance com.package.etc.Parent#18374850 at
org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:301)

我尝试在删除之前调用更新,但得到了相同的异常。

有什么想法吗?

最佳答案

我设法解决了这个问题。我没有注释该方法@Transactional。

关于java - JPA OneToMany - 删除最后一个子项时删除父项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14157590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com