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

Spring data JPA不删除实体

戴博
2023-03-14

我在从数据库中删除实体时遇到问题。不管我做什么,它都不会删除。

驾驶员等级

@Entity
@Table(name = "drivers")
public class Driver {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToMany(mappedBy = "driver", fetch = FetchType.EAGER)
    @JsonSerialize(using = RatingsSerializer.class)
    private List<Rating> ratings;

    // other fields. Getters and Setters...
}

评级等级

@Entity
@Table(name = "ratings")
@JsonDeserialize(using = RatingDeserializer.class)
public class Rating {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    @JoinColumn(name = "driver_id")
    private Driver driver;

    @ManyToOne
    @JoinColumn(name = "client_id")
    private Client client;
    private int mark;
    private Date createdAt;

    //Getters and Setters ...
}

我做的第一件事是用@OneTo很多(maspdBy="驱动程序",fetch=FetchType注释评级。EAGER,孤儿删除=true,级联=CascadeType。REMOVE),当调用driverRepository.delete(驱动程序)时,它会抛出:

org.postgresql.util。PSQLException:错误:更新或删除表“drivers”违反了表“ratings”上的外键约束“fk3raf3d9ucm571r485t8e7ew83”

好吧,选择另一种方式。尝试使用ratingRepository删除每个评级对象,但从未发生过,它只是彻底迭代每个评级项目并再次抛出错误

org.postgresql.util.PSQLException

下一步是将每个评级项目的客户端和驱动程序设置为null。现在,驱动程序实体已从数据库中删除,但评级实体仍保留在数据库中。发生了什么?

Spring Data JPA版本:1.5.7

共有1个答案

松钊
2023-03-14

看起来您的外键错误与根据您的代码行链接的客户端表有关:

@ManyToOne
@JoinColumn(name = "client_id")
private Client client;

所以,如果你加上cascade=CascadeType。在注释中删除,它可能会起作用。但,若你们想删除级联上的所有内容,包括客户端行,那个就取决于你们了。如果不是,则首先将该列值更新为null。

 类似资料:
  • 删除父实体时,我还想删除关联的子实体(从数据库中)。我试图在删除时使用级联,如下所示,但我一定做错了什么。 当对父实体对象调用删除时,我收到错误消息:“该实体仍在数据库的其他地方引用”。我可以确认该实体在数据库的其他地方引用的唯一地方是在下面的两个表中(如果我手动从数据库中删除子行,对父实体对象的删除调用工作正常)。在过去的9个小时里,我一直在阅读实体对象并尝试不同的东西。我做错了什么? 这是我的

  • 我的实体。ValidationStep与documentDetail有一对一的关系,documentDetail与documentValidations有一个完全的关系 我的删除查询 父ValidationStep被删除,但是docDetail和documentValidations仍然在数据库中。

  • 我正在使用 netbeans 并从数据库生成实体类。我所有插入和更新实体的合并调用都运行良好,但是当我尝试删除实体时,它不会将其从数据库中删除,也不会引发异常。有人可以帮我解决。我的代码如下: AbstractFacade.java AccountEntity.java DealerEntity.java

  • 我用的是SpringBoot和JPA Hibernate。 我有这些实体: 当我尝试删除父实体(Post)时,所有相关实体注释都保留在数据库中。为什么级联删除不起作用?

  • 主要内容:JPA实体删除示例要从数据库中删除记录,可以使用接口提供方法。方法使用主键来删除特定的记录。 JPA实体删除示例 在这里,我们将演示如何根据主键删除指定学生的信息。 完整的项目代码如下所示 - 这个例子包含以下步骤 - 第1步: 在包下创建一个名为的实体类,它包含属性:,和。 文件:StudentEntity.java 的代码如下 - 第2步: 将实体类和其他数据库配置映射到文件中。 文件:persistence.

  • 问题内容: 我目前正在尝试使用Spring Data存储库来删除一些实体。Delete调用可以正常工作,没有任何异常/错误消息,但是此后不会删除该实体。 这些是我的实体: 和 该存储库非常简单: 删除呼叫就像 有什么想法为什么这种变化没有反映在数据库中? 编辑1: 我找到了解决方法,但我仍然不明白真正的问题是什么。如果我这样删除帖子,它“起作用”(由于违反约束,有几个例外,但帖子仍被删除): 编辑