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

时间:2019-05-26 05:12:25

标签: spring-data-jpa spring-data

我有一个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 :(得分:0)

我必须这样做才能完成这项工作。

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

答案 1 :(得分:0)

通常,如果要从父类中删除子类,则应通过删除子类的记录来执行此操作。 在这种情况下,您将删除addressRepository中的地址:

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

答案 2 :(得分:0)

orphanRemoval属性与父实体一起处理子实体。

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

OR

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