当前位置: 首页 > 知识库问答 >
问题:

Spring Data REST-当PATCH在请求体中带有空数组时出现异常

尚棋
2023-03-14
@Entity
@Data
public class Atoll {

    @Id
    @GeneratedValue
    private Long id;

    private String atollName;

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "atoll_id")
    private List<Island> islands = new ArrayList<>();

}
@Entity
@Getter
@Setter
public class Island extends Auditable{

    @Id
    @GeneratedValue
    private Long id;

    private String islandName;

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        Island that = (Island) o;
        return Objects.equals(this.getCreatedDate(), that.getCreatedDate());

    }

    @Override
    public int hashCode() {
        return Objects.hash(this.getCreatedDate());
    }

}
{
    "atollName":"Haa Alif",
    "islands":[{
        "islandName":"Dhidhdhoo"
    }]
}
A collection with cascade=\"all-delete-orphan\" was no longer referenced by the owning entity instance: com.boot.demo.model.Atoll.islands; nested exception is org.hibernate.HibernateException: A collection with cascade=\"all-delete-orphan\" was no longer referenced by the owning entity instance: com.boot.demo.model.Atoll.island

我搜索了stackoverflow并找到了这个答案,它说这主要是由于equals和hashCode方法造成的,所以我重写了默认的equals和hashCode方法,但错误仍然是一样的(equals方法中使用的createddateauditable类的一部分)。

那么是什么导致了这个异常,我如何修复它呢?

共有1个答案

穆彬郁
2023-03-14

您必须在Atoll类中实现add/remove方法。

所以,你的映射:

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "atoll_id")
private List<Island> islands = new ArrayList<>();

和两个添加/删除方法:

public void addIsland(Island island) {
    this.getIslands().add(island);
}

public void removeIsland (Island island) {
    this.getIslands().remove(island);
}
 类似资料:
  • 问题内容: 我尝试了python 请求库文档中提供的示例。 使用,我得到了响应代码,但是我想获得所请求的每个页面的内容。例如,这不起作用: 问题答案: 注意 下面的答案是不适用于请求v0.13.0 +。编写此问题后,异步功能已移至。但是,你可以将其替换为下面的内容,它应该可以工作。 我已经留下了这个答案,以反映原始问题,即有关使用请求的问题。 要异步执行多个任务,你必须: 为每个对象定义一个函数(

  • 问题内容: 我对PersonDTO具有以下定义: 这是一个示例记录: 现在,约翰·多伊离婚了。因此,我需要向该URL发送PATCH请求: 带有以下请求正文: 我不知道该怎么做。这是我到目前为止尝试过的: 这是上述问题: 1)由于我仅设置了MaritalStatus,因此其他字段均为null。因此,如果我打印出请求,它将看起来像这样: 这是否意味着我必须先获得GET才能进行PATCH? 2)我得到以

  • 问题内容: 将请求正文与GET请求一起传递是否违反REST风格? 例如在Elasticsearch中过滤一些信息 甚至设计了一些工具来避免GET请求中的请求主体(例如邮递员) 问题答案: 从RFC: GET请求消息中的有效负载没有定义的语义。在GET请求上发送有效内容正文可能会导致某些现有实现拒绝该请求。 换句话说,这不是禁止的,但是它是未定义的行为,应避免使用。HTTP客户端,服务器和代理可以随

  • 我有一个Rest控制器处理多部分/表单数据请求。每个请求都包含一些json格式的指令,需要进行解析。 调用会抛出一个,该异常不提供太多信息。它只是说:“无法识别的类型:[null]”。 完整的stacktrace如下所示: 我已经检查了“JSON”部分是否存在。提交的数据相当简单: 相应的JAXB注释POJO是直截了当的。没什么特别的: } 真正让我头疼的是,在resteasy文档中,它说: 每个

  • 我正在我的本地主机上构建Web应用程序。 前端是Reactjs框架,运行在LocalHost:3000中

  • zapier中的Javascript代码 在Action类中,我正在获取请求数据 正在获取异常 java.lang.NullPointerException\n\tat java.io.StringReader