默默无视remove()

Mak*_*rov 4 java hibernate jpa jpa-2.0

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

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

Dra*_*vic 5

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

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

un-scheduling entity deletion ...
Run Code Online (Sandbox Code Playgroud)

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

  • @MaksimGumerov在刷新时,持久化操作将级联到持久化上下文中存在的所有实体的所有关联. (2认同)