有一个实体A引用(多对一)实体B,从B到A的反向(映射)引用。也有从A到C的引用,以及从C到A的反向引用。当我发布entityManager.remove(A)然后flush(),“delete”不会发芽!但也没有例外。就像根本没有调用remove()一样。为什么会这样?如果在remove()之前,我们从反向引用B.listOfA和C.listOfA中提取A,则会按预期生成“删除”。
还要注意我的另一个问题,我得出的结论是orphanRemoval并不总是按预期运行。现在,我开始怀疑级联的效果很好,但是在实际级联的删除之后,就象我在这里描述的那样被“吞噬”了。
基本上,JPA规范要求,如果对持久对象执行了持久化操作,就必须再次对其进行管理。
要验证是否确实在发生这种情况,请为org.hibernate软件包启用跟踪日志级别,并搜索日志条目,例如:
org.hibernate
un-scheduling entity deletion ...
为避免任何不可预测的行为,建议从加载了相同会话/事务的所有其他实体实例中删除对已删除实体的引用。