Spring-Data-JPA -如何删除OneToMany关系中的子记录

mtb9vblg  于 2023-10-20  发布在  Spring
关注(0)|答案(3)|浏览(143)

我有一个Person实体,它有Set<Address>和OneToManyMap。

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

地址类具有

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

现在我可以成功地在DB中添加记录了。
我如何才能实现清除地址散列集应该导致删除该人的地址记录。
例如:在我的服务层中,下面的代码不会删除DB中的地址。

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

实现这一目标的正确途径是什么?

jm81lzqq

jm81lzqq1#

我不得不这么做才能成功。

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

c2e8gylq2#

移除属性处理子实体与父实体的移除。

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

@OneToMany(mappedBy="class", 
           cascade= CascadeType.ALL, 
           orphanRemoval=true)
Set<ClassStudents> students;
jdgnovmf

jdgnovmf3#

通常,如果你想从父类中删除一个子类,你应该通过删除子类的记录来实现。在这种情况下,您可以删除addressRepository中的地址:

Person p =  personRepository.findBy(1).get();
addressRepository.deleteAll(p.getAddresses());

相关问题