Обновление объекта вызывает ошибку: cascade = "all-delete-orphan" больше не ссылался на объект-владелец - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть следующие сущности таблицы, в которых я пытаюсь обновить существующую запись, при этом я получаю следующую ошибку. Я знаю, что делаю какую-то ошибку в определении сущности, но не могу понять это. Благодарим вас за помощь.

                **A
        -------------------
        |                 |
        B                 C
                      ---------
                      |       |
                      D       E**

@Entity
@Table()
public class A {
    @Id
    Long id;

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval=true)
    @JoinColumn(name = "id", referencedColumnName="id",  nullable = false)
    private Set<B> b;

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval=true)
    @JoinColumn(name = "id", referencedColumnName="ID",  nullable = false)  
    private Set<C> c;
}

@Entity
@Table()
public class B{
    @Id
    Long id;
}

@Entity
@Table()
public class C{
    @Id
    Long id;
    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval=true)
    @JoinColumn(name = "id", referencedColumnName="id",  nullable = false)
    private Set<D> D;

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval=true)
    @JoinColumn(name = "id", referencedColumnName="ID",  nullable = false)  
    private Set<E> E;
}

@Entity
@Table()
public class D{
    @Id
    Long id;
}

@Entity
@Table()
public class E{
    @Id
    Long id;
}

ОШИБКА:

org.hibernate.HibernateException: коллекция с cascade = "all-delete-orphan" больше не ссылалась на экземпляр экземпляра объекта: com .entity. C .D

at org.hibernate.engine.internal.Collections.processDereferencedCollection(Collections.java:100) ~[hibernate-core-5.3.12.Final.jar:5.3.12.Final]
at org.hibernate.engine.internal.Collections.processUnreachableCollection(Collections.java:51) ~[hibernate-core-5.3.12.Final.jar:5.3.12.Final]
at org.hibernate.event.internal.AbstractFlushingEventListener.flushCollections(AbstractFlushingEventListener.java:262) ~[hibernate-core-5.3.12.Final.jar:5.3.12.Final]
at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:95) ~[hibernate-core-5.3.12.Final.jar:5.3.12.Final]

1 Ответ

0 голосов
/ 13 февраля 2020

Отображение зависит от принадлежности ассоциации, учитывая ваш пример, на это трудно указать, но вы можете проверить эту публикацию , чтобы лучше понять, когда используется тот или иной подход и последствия в базе данных. Я не знаю, относится ли это к вашему обновлению, но когда вы обновляете childs, вам нужно очистить свою прошлую коллекцию и использовать метод addAll, чтобы избежать ошибок такого рода. Проверьте также сообщение .

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