使用JPA的java删除实体
我无法从数据库中删除实体。我有两个班,一个是收据,另一个是服务。收据上有
@ElementCollection
@OneToMany(cascade={CascadeType.ALL}, orphanRemoval=true)
public List<Serving> servings;
我试图从控制器中删除一个服务
Serving serving = Serving.findById(servID);
serving.delete();
结果是
执行异常 发生PersistenceException:组织。冬眠例外ConstraintViolationException:无法执行JDBC批处理更新
# 1 楼答案
阅读堆栈跟踪的其余部分,应该可以找到已违反的约束的名称。您可能有其他实体引用了您试图删除的服务(即,其他一些行具有您试图删除的服务行的外键)
所以,为了能够删除这个实体,必须确保通过外键引用它的所有实体不再引用它。如何做到这一点取决于这些实体是什么,它们与服务的关系是如何实现的,以及您想要做什么:只需删除关联,或者同时删除引用实体
# 2 楼答案
比如:
由于收据是其服务的OO所有者,因此从OO的角度来看,收据必须知道服务何时被删除
可能会在收据上写一封关于服务或服务ID的查询函
(你确定服务不应该知道它属于哪一张收据吗?——这似乎表明一份服务确实属于一张而且只有一张收据)