Я использую весеннюю загрузку 2, jpa с гибернацией.У меня есть объект со многими детьми.Я ищу, чтобы удалить childs и child of child ...
Существует одно отношение, которое не удаляется
У меня есть тезисы объектов.
public class Spi{
...
@OneToMany(mappedBy = "spi", orphanRemoval = true,cascade = {CascadeType.MERGE, CascadeType.PERSIST})
private List<Asi> asi = new ArrayList<>();
@OneToMany(mappedBy = "spi", orphanRemoval = true,, cascade = {CascadeType.MERGE, CascadeType.PERSIST})
private List<SapI> sapI = new ArrayList<>();
..
}
public class Asi{
...
@OneToMany(mappedBy = "asi", orphanRemoval = true,cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@Audited
private List<Gi> gi = new ArrayList<>();
@ManyToOne
Spi spi;
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(name = "asi_scpi")
private Set<Scpi> scpi = new HashSet<>();
}
public class Gi{
...
@ManyToOne
Asi asi;
}
public class Scpi{
...
@ManyToMany(mappedBy = "scpi")
Set<Asi> asi = new HashSet<>();
}
public class Sapi{
...
@ManyToOne
Spi spi;
}
Я ищу, чтобы сохранитьСпи, но удалить Аси и Сапи.Поскольку я удаляю Asi, Scpi и gi также должны быть удалены.
@Transactional
public void deleteChilds(Integer spiId){
scpiRepository.deleteBySpiId(spiId);
em.flush();
em.clear();
Optional<Spi> optSpi = repository.findById(spiId);
if (optSpi.isPresent()) {
Spi spi = optSpi.get();
spi.getSpci().clear();
spi.getAsi().clear();
repository.save(spi);
}
}
Существует одно отношение, которое не удаляется, это spci.С
scpiRepository.deleteBySpiId(spiId);
я вижу, что есть два удаления, которые сделаны по одному для таблицы и таблицы соединения, но это, кажется, не сделано