gpt4 book ai didi

jpa - 从 ManyToOne 关系中删除对象不会更新父集合

转载 作者:行者123 更新时间:2023-12-04 00:47:22 29 4
gpt4 key购买 nike

我在父子之间有 ManyToOne 关系。我想删除回答特定查询的多个子实体。问题是在我运行删除查询后,Parent.getChildren() 仍然返回已删除的子项。

在这种情况下我不能使用删除查询吗?

@Entity
@Table(name = "CHILD_DATA")
public class Child {
private Parent parent;
}


@Entity
@Table(name = "PARENT")
public class Parent{

private Set<Child> children;

@Column(name = "CHILDREN")
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
public Set<Child> getChildren() {
return children;
}

}

public class ChildDAO{

public int removeServiceFrontPageData(Parent parent, long serviceID){
String query = "DELETE FROM Child WHERE parent =:parent";
Query q = em.createQuery(query);
q.setParameter("parent", parent);
return q.executeUpdate();
}
}

要刷新父实体,我使用以下函数:

public class ParentDAO{

public Parent getParent(String parentID){
final String select = "FROM Parent WHERE parentID = :parentID";
Query q = em.createQuery(select);
q.setParameter("parentID", parentID);
if(q.getResultList().isEmpty()){
return null;
}
return (Parent) q.getSingleResult();
}

}

谢谢

最佳答案

我的解决方案基于另一个 post

我找到了两种解决方法:

1) 如果我移除子项,则更新父项:

  • 选择应删除的子实体。
  • 从 parent.getChildren() 中删除这些实体
  • 从数据库中删除 child

2) 在 parent.getChildren() 上添加 orphanRemoval=true 标志。从集合中移除子项会将它们从数据库中移除

@Entity
@Table(name = "PARENT")
public class Parent{

private Set<Child> children;

@Column(name = "CHILDREN")
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
public Set<Child> getChildren() {
return children;
}

关于jpa - 从 ManyToOne 关系中删除对象不会更新父集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6402584/

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