首页 > 解决方案 > 将 Spring Boot 从 2.1.5 升级到 2.1.6 时出现问题,似乎没有正确/以正确的顺序删除数据

问题描述

我正在尝试将 Spring Boot 从 2.1.5 升级到 2.1.6(关键是要升级到 2.2x,但这是我发现问题的地方)

在我们的一项测试中尝试删除 subjectType 类型的实体时出现以下异常:

  Detail: Key (id)=(5cd21b13-5dea-4384-9589-3a4d1ab4dfea) is still referenced from table "metric".

这似乎很清楚,对吧?我正在尝试删除仍然引用它的东西。

但是,代码总是可以正常工作。就这么简单:

List<Metric> metrics = metricRepo.findBySubjectTypeId(id);
metricRepo.deleteAll(metrics);
subjectTypeRepo.delete(subjectType);
entityManager.flush();
... //some code that removes data from other systems now that this part succeeded

异常发生在刷新时,id 是要删除的 subjectType 的 id。

Metric 对 subjectType 有一个相当标准的参考,如下所示:

@Entity
public class Metric {

    @JoinColumn(name = "subject_type_id", nullable = false, foreignKey = @ForeignKey(name = "fk_subject_type"))
    @ManyToOne
    private SubjectType subjectType;
}

我们不使用级联删除,因为其他系统中的数据需要删除。但是,在实际删除 subjectType 本身之前手动删除引用 subjectType 的对象应该适用于简单的非并发情况。

我试图查看 2.1.5 和 2.1.6 之间依赖关系的变化,但无法挑选出任何明显的候选者,而且除了验证器之外,Hibernate 似乎没有升级。所以我真的很茫然,这里突然发生了什么变化,是什么导致了这个问题。该问题仍然存在于(当前最新的)2.2.1 版本中。

标签: javaspringhibernatespring-bootjpa

解决方案


推荐阅读