删除未完成

时间:2018-09-21 13:24:25

标签: hibernate spring-boot jpa spring-data-jpa

我将Spring Boot 2,JPA和Hibernate一起使用。 我有很多孩子的对象。我搜索删除孩子和孩子的孩子...

只有一种关系不能删除

我有这些对象。

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;
}

我搜索保留Spi,但删除了Asi和Sapi。因为我删除了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);

我看到有两个删除操作,分别为表和联接表完成一个操作,但似乎没有完成

0 个答案:

没有答案