2

我和孩子有@OneToMany双向的关系。@ManyToOne孩子们站在主人一边。

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

父类.java

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

子.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)

我试过在remove之前调用update,但得到了同样的异常。

有任何想法吗?

4

1 回答 1

0

我设法解决了它。我没有注释@Transactional 方法。

于 2013-04-30T21:40:39.983 回答