我正在尝试在父实体和子实体之间实现软删除,删除父实体也会删除其所有子实体。
我的父实体是 User
,与 Profile
有 @OneToMany
关系。 Profile
是使用对 User
的引用创建的。删除 User
工作正常,但在尝试检索引用 User
的 Profile
时,出现异常。
{
"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/