JPA: удалить дочерний элемент из родительского объекта без слияния с родительским элементом в двунаправленных отношениях - PullRequest
0 голосов
/ 16 ноября 2018

Я работаю со следующими отношениями родитель-ребенок:

@Entity
@Audited
public class Parent implements Serializable {
    @Id
    private Long id;

    @OneToMany(mappedBy = "parent", cascade = {CascadeType.ALL}, orphanRemoval = true)
    private Set<Child> children;

    // Empty default constructor
    // Getters and setters
}

@Entity
@Audited
public class Child implements Serializable {
    @Id
    private Long id;

    @ManyToOne
    @JoinColumn(nullable = false)
    private Parent parent;

    // Empty default constructor
    // Getters and setters
}

Вариант использования, над которым я работаю, предусматривает удаление ребенка от его родителя, , но на данный момент я явно не должен объединять родительскую сущность.Поэтому я попытался сделать следующее:

Child childFromDb = entityManager.find(Child.class, child.getId());
childFromDb.setParent(null);
entityManager.remove();

Это приводит к java.sql.BatchUpdateException: (conn:1) Column 'parent_id' cannot be null, генерируемому Hibernate.

Установка @JoinColumn(nullable = true) решает эту проблему, но схема базы данных использует DEFAULT NULL настолбец, который нежелателен, так как никакие объекты child не могут существовать без связанных parent.Кроме того, я не могу использовать оператор delete в HQL, JPQL, нативном SQL или CriteriaDelete, поскольку таблицы проверяются с использованием Envers (5.1.4).Я помню, что Envers не поддерживает массовые операторы (вставка, обновление, удаление, https://hibernate.atlassian.net/browse/HHH-3554) или CriteraUpdate / CriteraDelete (https://hibernate.atlassian.net/browse/HHH-10318).

Как я могу удалить только child без объединения parent, сохраняя ограничение столбца NOT NULL и не используя другой параметр удаления? Возможно ли это вообще?

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