java - 软删除 : Child Entity not being deleted after Deleting parent Entity in @OneToMany relation in Spring Boot JPA Hibernate

标签 java spring hibernate spring-boot jpa

我正在尝试在父实体和子实体之间实现软删除,删除父实体也会删除其所有子实体。 我的父实体是 User,与 Profile@OneToMany 关系。 Profile 是使用对 User 的引用创建的。删除 User 工作正常,但在尝试检索引用 UserProfile 时,出现异常。

{
    "title": "Internal Server Error",
    "status": 500,
    "detail": "Unable to find com.user.domain.User with id 951; nested exception is javax.persistence.EntityNotFoundException: Unable to find com.user.domain.User with id 951",
    "path": "/api/profiles",
    "message": "error.http.500"
}

用户.java

@NoArgsConstructor(force = true, access = AccessLevel.PRIVATE)
@EqualsAndHashCode(exclude = {"users"})
@ToString(exclude = {"users"})
@Getter
@JsonDeserialize(builder = Profile.Builder.class)
@Entity
@Table(name = "users")
@SQLDelete(sql="Update users SET deleted = 'true' where id=?")
@Where(clause="deleted != 'true'")
public class User implements Serializable {

    private static final long serialVersionUID = 1L;
    @Column(name = "password")
    private final String password;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
    @SequenceGenerator(name = "sequenceGenerator")
    private Long id;

    @Column(name = "email")
    private String email;

    @Enumerated(EnumType.STRING)
    @Column(name = "gender")
    private Gender gender;
    
    @OneToMany(mappedBy = "users", cascade = { CascadeType.PERSIST, CascadeType.MERGE }, orphanRemoval = true)
    private Set<Profile> profiles = new HashSet<>();
    
    @Column(name="deleted")
    String deleteFlag;

}

配置文件.java

@NoArgsConstructor(force = true, access = AccessLevel.PRIVATE)
@EqualsAndHashCode(exclude = {"users"})
@ToString(exclude = {"users"})
@Getter
@JsonDeserialize(builder = Profile.Builder.class)
@Entity
@Table(name = "profile")
@SQLDelete(sql="Update users SET deleted = 'true' where id=?")
@Where(clause="deleted != 'true'")
public class Profile implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
    @SequenceGenerator(name = "sequenceGenerator")
    private final Long id;

    @Column(name = "profile_name")
    private final String profileName;

    @Column(name = "date_of_birth")
    private final LocalDate dateOfBirth;

    @Column(name = "health_history")
    private final String healthHistory;
    
    @ManyToOne
    @JoinColumn(name = "users_id")
    @JsonIgnoreProperties("reports")
    private final User users;

    @Column(name="deleted")
    String deleteFlag;
}

最佳答案

个人资料的删除查询有问题

@SQLDelete(sql="Update users SET deleted = 'true' where id=?")

此处您要更新用户表。我认为这是一个问题,为什么您的个人资料在删除用户后没有被删除。

关于java - 软删除 : Child Entity not being deleted after Deleting parent Entity in @OneToMany relation in Spring Boot JPA Hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54702890/

相关文章:

java - 带有可选类的方法注入(inject)?

Java - 使用 hibernate 读取从 MYSQL 查询返回的列表

hibernate - Criteria 中的 setResultTransformer

Spring Boot Data Rest POST 返回 204 但只有 SELECTS

java - 在 Grails 中显示日期/保存日期

java - IntelliJ IDEA 14 构建项目正常,但在编辑器中显示很多错误

java - 用于填充多个部分的 Android GridView 适配器

java - jboss-as-maven-plugin 无法部署到远程 JBoss AS7?

spring - <springProperty> 配置元素的 Spring logback 范围属性的含义是什么?

java - 如何在JPA中查找重复项?