Spring Boot PersistentBag remove () создает исключение UnsupportedOperationException - PullRequest
0 голосов
/ 07 апреля 2020

Согласно этой статье я реализовал следующую двунаправленную ассоциацию сущностей родитель-потомок

public class Parent { 
    @OneToMany(mappedBy = parent, cascade = CasacadeType.ALL, orphanRemoval = true) 
    private List<Child> children = new ArrayList<>();

    public void removeChild(Child child) {
        children.remove(child);
        child.setParent(null);
    }
}

public class Child {
    @ManyToOne
    @JoinColumn(name = "PARENT_ID")
    private Parent parent;
}

Теперь, даже если я выполняю операцию remove () , UnsupportedOperationException выбрасывается, потому что Spring всегда возвращает PersistentBag , который не поддерживает remove (), removeAll () или clear ()

How можно ли удалить ребенка от родителя?

1 Ответ

0 голосов
/ 07 апреля 2020

Необходимо переопределить методы equals() и hashCode(), если вы собираетесь использовать присоединение отдельных экземпляров. Hibernate гарантирует эквивалентность постоянной идентичности (строки базы данных) и Java идентичности только внутри определенной области сеанса. Поэтому, как только мы смешаем экземпляры, извлеченные в разных сеансах, мы должны реализовать equals() и hashCode(). ( Ref )

Примечание: в данной статье equals() и hashCode()

Для активной загрузки remove() не будет работать ( Ref ). Используйте стратегию FetchType.LAZY для @ManyToOne ассоциаций, потому что по умолчанию @ManyToOne ассоциации используют FetchType.EAGER.

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