实体 A 引用(多对一)实体 B,具有从 B 到 A 的反向(映射)引用。此外,还存在 A 到 C 的引用以及 C 到 A 的反向引用。
当我发出entityManager.remove(A)然后flush()时,不会生成“删除”!但也没有例外。就像根本没有调用remove() 一样。为什么会发生这种情况?
如果在remove()之前我们从反向引用B.listOfA和C.listOfA中提取A,则会按预期生成“delete”。
另请注意我的另一个问题 https://stackoverflow.com/questions/34318864/orphan-removal-not-working-if-not-complete-orphan/34743991#34743991我得出的结论是孤儿移除并不总是按预期工作。现在我开始怀疑也许级联效果很好,但在实际的级联删除之后就像我在这里描述的那样被“吞没”了。
看看这个answer https://stackoverflow.com/a/34240940/4754790。基本上,JPA 规范要求如果对已删除的实体应用持久操作,则该实体将再次受到管理。
要验证这是否确实发生,请启用跟踪日志级别org.hibernate
打包并搜索日志条目,例如:
un-scheduling entity deletion ...
为了避免任何不可预测的行为,建议从加载相同会话/事务的所有其他实体实例中删除对已删除实体的引用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)