Spring-Data-JPA - Как удалить дочернюю запись в отношении OneToMany - PullRequest
0 голосов
/ 26 мая 2019

У меня есть Person объект, который имеет Set<Address> с отображением OneToMany.

@OneToMany(
        mappedBy = "person",
        fetch = FetchType.LAZY,
        cascade = CascadeType.ALL
)
private Set<Address> addresses = new HashSet<>();

Адресный класс имеет

@ManyToOne
@JoinColumn(name = "person_id")
private Person person;

Теперь я могу успешно добавлять записи в БД.

Как я могу добиться очистки хэш-набора адресов, который должен привести к удалению записей адресов для этого человека.

Например: в моем слое обслуживания приведенный ниже код не удаляет адреса в БД.

Person p =  personRepository.findBy(1).get();
p.getAddresses().clear();
personRepository.save(p);

Как правильно достичь этого?

Ответы [ 3 ]

0 голосов
/ 04 июня 2019

Обычно, если вы хотите удалить дочерний элемент из родительского класса, вы должны сделать это, удалив запись вашего дочернего класса.В этом случае вы удалили бы адреса в addressRepository:

Person p =  personRepository.findBy(1).get();
addressRepository.deleteAll(p.getAddresses());
0 голосов
/ 04 июня 2019

Атрибут orphanRemoval обрабатывает удаление дочерних сущностей с родительской сущностью.

    @OneToMany(mappedBy="class", cascade= {CascadeType.PERSIST, CascadeType.REMOVE}, orphanRemoval=true)
Set<ClassStudents> students;

ИЛИ

@OneToMany(mappedBy="class", cascade= CascadeType.ALL, orphanRemoval=true)
Set<ClassStudents> students;
0 голосов
/ 26 мая 2019

Я должен был сделать это, чтобы сделать эту работу.

@OneToMany(
        mappedBy = "person",
        fetch = FetchType.LAZY,
        cascade = CascadeType.ALL,
        orphanRemoval = true
)
private Set<Address> addresses = new HashSet<>();    
...