Я пытаюсь реализовать мягкое удаление между родительской и дочерней сущностью таким образом, чтобы при удалении родительской сущности также удалялись все ее дочерние сущности.Мой родительский объект - User
с отношением @OneToMany
с Profile
.Profile
создается со ссылкой на User
.Удаление User
работает нормально, но при попытке извлечь Profile
, который ссылался на User
, я получаю исключение.
{
"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"
}
User.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;
}