@MaxLich
java developer

Как удалять связанную сущность при отвязывание от неё?

Здравствуйте. Не получается сделать так, что при отвязывании от связанной сущностью она удалялась из базы. Связь один-к-одному. Если обнуляю ссылку на связанную сущность или кладу туда другой объект и обновляю главную сущность, то не удаляет старую связанную сущность. При null вообще ничего не делает. Если сеттю другую сущность, то в базе в таблице связанной сущности создаётся ещё одна запись. Но из-за связи 1-1 возникают ошибки при получении главной сущности по ид.
Главная сущность:
@Entity
@Table(name = "request", schema = "gr")
public class RequestEntity implements Serializable {

// some fields and getters and setters
    @OneToOne(mappedBy = "requestByRequestId", orphanRemoval = true, cascade = {CascadeType.ALL})
    public RejectionEntity getRejectionByRequestId() {
        return rejectionByRequestId;
    }

    public void setRejectionByRequestId(RejectionEntity rejectionByRequestId) {
        this.rejectionByRequestId = rejectionByRequestId;
    }
}

Связанная сущность:
@Entity
@Table(name = "rejection", schema = "gr")
public class RejectionEntity implements Serializable {

// some fields and getters and setters
    @JsonIgnore
    @OneToOne
    @JoinColumn(name = "REQUEST_ID", referencedColumnName = "REQUEST_ID", nullable = false)
    public RequestEntity getRequestByRequestId() {
        return requestByRequestId;
    }

    public void setRequestByRequestId(RequestEntity requestByRequestId) {
        this.requestByRequestId = requestByRequestId;
    }
}


То есть я хочу, чтобы при выполнение какого-то такого кода:
requestEntity.setRejectionByRequestId(null);

getSession().update(requestEntity);

из таблицы Rejection удалялась запись с ссылкой на соответствующую запись из таблицы Request. Сейчас этого не происходит.

Также, если выполнять какой-то такой код:
RejectionEntity rej = requestEntity.getRejectionByRequestId(); // != null
requestEntity.setRejectionByRequestId(new RejectionEntity());

getSession().update(requestEntity);

То в таблице Rejection создаётся ещё одна запись, с ссылкой на запись из таблицы Request. А старая запись, ссылающаяся на ту же запись таблицы Request, из таблицы Rejection не удаляется. Из-за этого потом, при получении сущности по ид, возникает ошибка, и сущность не возвращается.
  • Вопрос задан
  • 81 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы