Hibernate - Как удалить сущность из родительского при удалении ребенка - PullRequest
0 голосов
/ 28 января 2019

Следующий код не работает

        User user = new User();
        Project project = new Project();
        project.setOwner(user);

        projectRepository.delete(project);

        assertEquals(0, user.getProjects().size());

Как мне настроить ассоциации, чтобы добиться этого?

В настоящее время у меня есть

public class User {
    @OneToMany(mappedBy = "owner")
    private Set<Project> projects = new HashSet<Project>();
}
public class Project {
    @ManyToOne
    private User owner;
}

Тест возвращает

java.lang.AssertionError: 
Expected :0
Actual   :1

1 Ответ

0 голосов
/ 28 января 2019

В отношениях «один ко многим» вы должны каскадно удалять от родителя к ребенку, а не наоборот.Что произойдет в вашем сценарии, если у вас есть 3 проекта, принадлежащих одному пользователю?Вы удаляете один из проектов, но не можете удалить пользователя, верно?Потому что у него есть еще 2 проекта.

Проверьте эту прекрасную статью на эту тему: https://vladmihalcea.com/a-beginners-guide-to-jpa-and-hibernate-cascade-types/ (Автор на самом деле отвечает на множество вопросов о гибернации здесь)

...