JPA删除实体类不能成功的原因

今天遇到一个郁闷的事,当我调用JPA  entityManager.remove(entity);用来删除一个购物车项的数据时,

发现SQL语句代码并没有执行,而remove其他实体类的时候却能成功。

我仔细观察了,终于发现原因。

这归根结底还是JPA entity生命周期的状态导致的,简称实体状态。

由于我的购物车对象关系 Cart ,CartItem为一对多的关系,我在删除CartItem时,Cart已经查询出来(未查询不在此列),当

我删除CartItem时,JPA将CartItem设置为删除状态,但是Cart也持有CartItem,并且Cart里的CartItem为持久状态,所以导致CartItem不能删除掉。

解决的办法就是:

将Cart里的CartItem也设置为删除状态。

//删除生成订单的购物车项
for (CartItem item : cart.getCartItems()) {
    cartAll.getCartItems().remove(item);
    cartItemDao.remove(item);
}
cartDao.merge(cartAll);

 此结论为个人看法,如果有不同看法可以回复,欢迎纠正。

 

 

 

 

你可能感兴趣的:(java,Hibernate,jpa)