【发布时间】:2019-03-26 14:19:53
【问题描述】:
我的 RestController 中有一个 DELETE 方法,需要从 Cart 中删除 CartItem 对象。它们使用 OneToMany 关系映射,在从 CrudRepository 调用 delete 方法后,该项目保留在数据库中,我没有收到任何错误...
我尝试将 CascadeType.ALL 删除到 CascadeType.REMOVE ,还尝试从 Principal 对象中获取购物车,还尝试了 deleteById(Long id) 和 delete(CartItem cartItem) ,但没有任何帮助,项目仍在数据库中。
//CartItem repository
public interface CartItemRepository extends CrudRepository<CartItem, Long> {
CartItem getByCartItemId(Long id);
}
//Cart entity
@OneToMany(mappedBy = "cart", cascade = CascadeType.REMOVE, fetch = FetchType.EAGER)
private Set<CartItem> cartItems = new HashSet<>();
//CartItem entity
@ManyToOne
@JoinColumn(name = "cartId")
@JsonIgnore
private Cart cart;
//Rest method
@RequestMapping(value = "remove/{cartItemId}", method = RequestMethod.DELETE)
@ResponseStatus(value = HttpStatus.NO_CONTENT)
public void removeItemFromCart(@PathVariable (value = "cartItemId") Long
cartItemId){
cartItemRepository.deleteById(cartItemId);
}
【问题讨论】:
-
可能是个问题,因为您没有同步双向关系。如果您删除拥有双向关系的子实体的子实体,则必须确保将其从单端的集合中删除。有关更多详细信息,请阅读此article