【发布时间】:2019-07-09 05:12:27
【问题描述】:
我正在尝试在父实体和子实体之间实现软删除,这样删除父实体也会删除其所有子实体。
我的父实体是 User 与 @OneToMany 与 Profile 的关系。 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;
}
Profile.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;
}
【问题讨论】:
-
删除父实体时如何软删除也会删除其所有子实体。我无法理解您要实现的目标。请编辑帖子并指定您需要的场景.
标签: java spring hibernate spring-boot jpa