Удалить не сделано полностью - PullRequest
0 голосов
/ 21 сентября 2018

Я использую весеннюю загрузку 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);

я вижу, что есть два удаления, которые сделаны по одному для таблицы и таблицы соединения, но это, кажется, не сделано

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...