Удалить дочернюю сущность родительской формы 1: 1 без сопоставлений JPA - PullRequest
0 голосов
/ 08 мая 2020

У меня есть ситуация, когда мне нужно удалить любого связанного родителя при удалении дочернего объекта и наоборот. Но по причинам «производительности» владелец не включил в объекты никаких сопоставлений JPA. Если я вручную удаляю родительский элемент перед удалением дочернего элемента, это не удается из-за ограничения FK и наоборот. Кто-нибудь может помочь? Сущности:

@Table(name = "child_node")
public class ChildNodeEntity {
    @Id
    private Long id;

    @Column(name = "case_id")
    private String caseId;

    @Column(name = "parent_id", updatable = false)
    private String parentId;
}

@Table(name = "parent_node")
public class ParentNodeEntity {
    @Id
    private Long id;

    @Column(name = "case_id")
    private String caseId;
}

Здесь, в дочерней сущности, parentId хранится как String (чтобы избежать проблем с производительностью, плюс родительский объект не используется нигде в проекте).

Вот код для удаления родителя из дочернего:

@Transactional
private void deleteBauCase(String caseId) {
    ChildNodeEntity child = service.getChildNodeEntityById(caseId);

    ParentNodeEntity parent = service.getParentNodeEntityById(caseId);
    parentNodeRepository.delete(parent);

    childNodeRepository.delete(child);
}

Что нужно сделать, чтобы удалить обе эти сущности? И обратный случай тоже (удалить ребенка от родителя). Я не могу использовать сопоставления @OnetoOne и каскадное удаление. Есть ли другой способ выполнить это? Ограничение внешнего ключа существует на стороне базы данных. Пожалуйста, помогите, так как я только знаком с работой с аннотациями.

1 Ответ

0 голосов
/ 22 июля 2020

Решено!

Оказывается, код в порядке (хотя и немного ужасно и нестандартно).

Проблема связана с ограничением внешнего ключа в БД. Для on delete по умолчанию установлено значение no action. Мне оставалось только сменить его на set null.

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