默默无视remove()

有实体A引用(多对一)实体B,具有从B到A的反向(映射)引用。还有引用A到C和反向引用C到A.当我发出entityManager.remove(A )然后flush(),“删除”不是gerenated! 但也没有例外。 这就像没有调用remove()一样。 为什么会这样? 如果在remove()之前我们从反向引用B.listOfA和C.listOfA中提取A,则会按预期生成“delete”。

还要注意我的另一个问题 ,我得出结论,orphanRemoval并不总是按预期工作。 现在我开始怀疑可能级联工作得很好,但在那之后实际的级联移除被“吞噬”了,就像我在这里描述的那样。

看看这个答案 。 基本上,JPA规范要求如果对其应用持久化操作,则删除的实体将再次被管理。

要validation这是否真的发生了,请为org.hibernate包启用跟踪日志级别并搜索日志条目,如:

 un-scheduling entity deletion ... 

为避免任何不可预测的行为,建议从加载相同会话/事务的所有其他实体实例中删除对已删除实体的引用。