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

Spring Data JPA:删除父实体,不会删除子实体

淳于哲
2023-03-14

我的实体。ValidationStep与documentDetail有一对一的关系,documentDetail与documentValidations有一个完全的关系

@Entity
public class ValidationStep {

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

@ManyToOne
@JoinColumn(name= "automation_information_aId", referencedColumnName= "aId")
private AutomationInformation automationInformation;

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@OneToOne(cascade = { CascadeType.ALL }, orphanRemoval = true,fetch=FetchType.LAZY)
private DocumentDetail documentDetail;
 }
@Entity
public class DocumentDetail {

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

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "documentDetail_id")
private List<DocumentValidation> documentValidationList
@Entity
public class DocumentValidation implements Comparable {

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


}

我的删除查询

        @Modifying
    @Query(value = "DELETE FROM ValidationStep validationStep WHERE validationStep.automationInformation.id = :aId AND isDraft is true")
    void  deleteAllDraftsByAutomationInformationaID(@Param("aId") Long aId);

父ValidationStep被删除,但是docDetail和documentValidations仍然在数据库中。

共有1个答案

鲜于喜
2023-03-14

来自JPA规范(第4.10段:批量更新和删除操作):

删除操作仅适用于指定类及其子类的实体。它不级联到相关实体。

只有在执行useentitymanager.remove()删除实体时,删除级联才起作用。如果执行删除查询,则不会。

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

  • 我在Spring MVC服务器中有2个JPA实体。其中一个是“父母”,另一个是孩子。正如我在这里读到的(原因4),当我有父实体和子实体时,首先必须删除父实体,然后删除子实体。它正在制作一个组织。冬眠例外约束ViolationException 父实体项目 儿童实体回复 我尝试在我的控制器中的“@Request estMap(value="ete")”中删除它们 但ConstraintViolati

  • 问题内容: 我有两个分别以双向一对多关系存在的实体类 A 和 B。 A.java: B.java 在一个简单的控制台应用程序中,我从数据库中获取了特定的 A 行,并尝试删除其详细信息 B 行(随机),但是 JPA / Hibernate* 不仅删除了该行-甚至没有向该行发出任何 DELETE 语句。数据库。删除 B 行的唯一方法是从 A.java 的集合( LinkedHashSet )中删除相应

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

  • 我的实体更新有问题。如你所见,我有三个实体。 包含类中的列表。 包含类中的列表。 从我的SQL语句中可以看到,字段和是唯一的。我的表中只允许该组合的一行。 当我用类的新列表更新父实体()时,我希望Hibernate删除旧列表本身并创建新实体。一个一个地更新孩子是有点困难的。这就是为什么我要直接删除所有相关的孩子。 当我更新并为其提供包含具有唯一名称的和(数据库中已存在的实体)组合的列表时,我会出现

  • 我正在尝试删除一个父/子自连接实体,但无法这样做,这里是我的映射