Мягкое удаление: дочерний объект не удаляется после удаления родительского объекта в отношении @OneToMany в Spring Boot JPA Hibernate - PullRequest
0 голосов
/ 15 февраля 2019

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

1 Ответ

0 голосов
/ 15 февраля 2019

Проблема в запросе на удаление профиля

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

Здесь вы обновляете таблицу пользователей.Я думаю, это проблема, почему ваши профили не удаляются после удаления пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...