Hibernate удаляет строки дочерних объектов, не влияя на строки родительских объектов - PullRequest
0 голосов
/ 25 июня 2018

Я должен удалить коллекцию строк дочерних объектов из строк родительских объектов.Но кое-как, как моя родительская сущность также удаляется.

Я вижу выше проблему из-за "CascadeType.ALL" на стороне отношений @ManyToOne.Но если я удаляю этот CascadeType.ALL в @ManyToOne, я получаю исключение ниже, когда выполняю persist для Parent, у которого тоже есть дочерний объект.

org.springframework.dao.InvalidDataAccessApiUsageException: объект ссылается на несохраненный временный экземпляр - сохранитьвременный экземпляр перед сбросом:

@Entity
public class Parent {
    @Id
    @Column(name = "ID")
    private Long id;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "parent", orphanRemoval=true)
    private Set<Child> childs = new HashSet<Child>();

 ...
}

@Entity
public class Child {
    @Id
    @Column(name = "ID")
    private Long id;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name="PARENTID", nullable = false)
    private Parent parent;

  ...
}

Класс обслуживания:

final Parent parent = parentDao.find(parentId, status);
parent.getChilds().clear();

1 Ответ

0 голосов
/ 25 июня 2018

Добавлены следующие методы в родительский класс

public void addChild( Child child )
{
    children.add( child );
    child.setParent( this );
}

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

И удаленный дочерний элемент использует removeChild для родительского класса.

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