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

JPA OneToMany在父级上删除不删除链接的实体

呼延沈义
2023-03-14

我用的是SpringBoot和JPA Hibernate。

我有这些实体:

@Entity
@Table(name = "post")
@AllArgsConstructor @NoArgsConstructor
@Getter @Setter
public class Item extends BaseEntity {

    @Id
    @Column(name = "id")
    @Type(type = "uuid-char")
    private UUID uuid = UUID.randomUUID();

    @OneToMany(mappedBy = "post", orphanRemoval=true, fetch = FetchType.EAGER)
    @MapKey(name="userId")
    private Map<UUID, Share> shares;

    .... 

    @CreationTimestamp
    @Column(name = "creation_date")
    @Setter(AccessLevel.NONE)
    private Instant creationDate;

    @UpdateTimestamp
    @Column(name = "last_mod_date")
    @Setter(AccessLevel.NONE)
    private Instant lastModificationDate;

}


@Entity
@Table(name = "comment"
@AllArgsConstructor @NoArgsConstructor
@Getter @Setter
public class Comment extends BaseEntity {

    @Id
    @Column(name = "id")
    @Type(type = "uuid-char")
    @Setter(AccessLevel.NONE)
    private UUID uuid = UUID.randomUUID();

    @ManyToOne(fetch = FetchType.LAZY)
    @NotNull()
    @JoinColumn(name = "post_id")
    private Post post;

    .....

    @CreationTimestamp
    @Column(name = "creation_date")
    @Setter(AccessLevel.NONE)
    private Instant creationDate;

    @UpdateTimestamp
    @Column(name = "last_mod_date")
    @Setter(AccessLevel.NONE)
    private Instant lastModificationDate;
}

@Test
@Transactional
public void testDeleteItem() {
    itemRepo.delete(item);
    itemRepo.flush();
}

当我尝试删除父实体(Post)时,所有相关实体注释都保留在数据库中。为什么级联删除不起作用?

共有1个答案

柴寂离
2023-03-14

OrphanRemoval不管用。使用cascade = CascadeType。全部改为

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

  • 问题内容: 我要删除,因此要从数据库中删除行。 我 确实 要删除某个实体及其所有行。不过,我 不 希望从它删除任何行。 如何 我能做到这一点? 是,并且是我要删除的实体。 请参阅下面的代码,了解我如何在“狗窝实体”中链接2: 目前,当我删除狗entitie(S),其相关的养犬实体 中 也被删除。 编辑:将狗映射到狗窝: 问题答案: 当前,当我删除狗实体时,其相关的狗窝实体也将被删除。 原因是您已设

  • 我有两个实体使用Spring和Hibernate

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

  • 我有一些关于“级联”的问题,在我的项目中,我有类别类,每个类可以是父类或子类。但我在同一个类中定义了哪一个是父母还是孩子。父母和孩子之间存在一对多的关系。这是我的实体类 我的问题是;当我删除子类别时,它的成功并没有问题。如果父类别有子类别,则无法删除父类别。 错误消息; Servlet.service()的servlet[调度Servlet]在上下文中与路径[]抛出异常[请求处理失败;嵌套异常or

  • 编辑:修改问题以更好地反映问题。此处最初发布的问题 我有一个父实体(< code >上下文)和一个子实体(< code >用户)。父级上的级联“删除”不会删除子级。代码如下: