java—删除子实体,而不使用@onetomany删除父实体

xtupzzrd  于 2021-06-29  发布在  Java
关注(0)|答案(0)|浏览(279)

我想从父实体中删除子实体。
我发现,如果我删除子代,它也会删除父代。
一对多

@OneToMany(cascade = CascadeType.ALL, 
             mappedBy = "giftList", 
             fetch = FetchType.EAGER, 
             orphanRemoval = true)
   private Collection<Gift> gifts = new HashSet<>();

多对一

@ManyToOne(optional = true, 
              fetch = FetchType.LAZY, 
              cascade = CascadeType.ALL)
    private GiftList giftList;

@删除Map

@DeleteMapping("/gifts/{id}")
public ResponseEntity<Gift> deleteGiftById(@AuthenticationPrincipal UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken, @PathVariable("id") Long giftId) {
    final Optional<Gift> giftListOptional = giftRepository.findById(giftId);

    if(giftListOptional.isPresent()){
        final Gift gift = giftListOptional.get();
        if(gift.getGiftList().getUser().getEmail().equals(usernamePasswordAuthenticationToken.getName())){
            giftRepository.delete(gift);
            return new ResponseEntity<>(HttpStatus.OK);
        } else {
            return new ResponseEntity<>(HttpStatus.UNAUTHORIZED);
        }
    }

    return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}

我试过将礼物列表的层叠类型设置为 CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH ,但这会阻止作为 CascadeType.REMOVE 不包括在内。
如果我加上 CascadeType.REMOVE 然后 gift 以及 giftlist 将被删除。
我应该使用什么级联类型?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题