默默无视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 ...
为避免任何不可预测的行为,建议从加载相同会话/事务的所有其他实体实例中删除对已删除实体的引用。
- 使用Hibernate OGM进行MongoDb身份validation
- Spring:hibernate + ehcache
- hibernate选择具有条件的顶部和底部n行
- org.hibernate.MappingException:没有JDBC类型的Dialect映射:1111
- Hibernate对Java 9的支持
- 如何使用Hibernate和Spring Boot正确处理空结果集
- Hibernate:安全地将对象重新附加到会话中
- JPAinheritance
- NoClassDefFoundError:javax / validation /validation甚至在POM中validation-api 1.1.0.Final