gpt4 book ai didi

java - 在 OneToMany 中识别子 null 并从数据库中删除的更好方法?

转载 作者:行者123 更新时间:2023-11-29 04:43:48 25 4
gpt4 key购买 nike

我有一个 RESTFul 系统,我遇到了两个类(父类和子类)的问题,它们具有 @OneToMany@ManyToOne 关系,例如:

//Parent
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "parent", orphanRemoval = true)
private Collection<Child> childCollection;

//Child
@ManyToOne(optional = false)
@JoinColumn(name = "ID_PARENT", referencedColumnName = "ID_PARENT")
private Parent parent;

附言:我使用的是 Hibernate 4.3

问题是:

我已经在数据库中拥有对象,例如:

Parent         Child
ID | NAME ID | PARENT | NAME
1 | Test 1 | 1 | Child1
2 | 1 | Child2

我发送的 JSON 如下:

{
"id": 1,
"name": "test",
"childCollection": null
}

我只是这样做:

session.merge(parent);

我收到以下错误:

A collection with cascade=”all-delete-orphan” was no longer referenced by the owning entity instance

为什么???有人可以帮助我吗?

最佳答案

Hibernate 要求完全拥有父对象中的子集合。如果您将它设置为 null,Hibernate 将无法跟踪对该集合的更改,因此不知道如何将级联持久性应用于您的对象。

您的父实体必须是托管实例。在您的情况下,您可以通过在调用合并之前查询实体来完成此操作。此后,如果要清除父元素中的所有子元素,则必须调用 parent.getChildCollection().clear() 而不是将集合设置为 null。这样,Hibernate 就真正在跟踪子集合了。最后执行 session.merge() 调用,错误不能出现。

有关此的更多信息:

HibernateException - A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance

关于java - 在 OneToMany 中识别子 null 并从数据库中删除的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38098690/

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