我有一个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);
实现此目标的正确方法是什么?
答案 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;