当前位置: 首页 > 面试题库 >

静默忽略remove()

阎弘
2023-03-14
问题内容

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

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


问题答案:

基本上,JPA规范要求,如果对持久对象执行了持久化操作,就必须再次对其进行管理。

要验证是否确实在发生这种情况,请为org.hibernate软件包启用跟踪日志级别,并搜索日志条目,例如:

un-scheduling entity deletion ...

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



 类似资料:
  • 问题内容: 有一个实体A引用(多对一)实体B,从B到A的反向(映射)引用。也有从A到C的引用,以及从C到A的反向引用。当我发布entityManager.remove(A )然后flush(),“ delete”没有发芽!但也没有例外。就像根本没有调用remove()一样。为什么会这样?如果在remove()之前,我们从反向引用B.listOfA和C.listOfA中提取A,则会按预期生成“删除”

  • 有一个实体A引用(多对一)实体B,从B到A有反向(映射到)引用。还有一个引用A到C,反向引用C到A。当我发出entitymanager . remove(A)then flush()时,没有生成“delete ”!但是也没有例外。就像根本没有调用remove()一样。为什么会这样?如果在remove()之前我们从反向引用B.listOfA和C.listOfA中提取A,那么“delete”就像预期的

  • 问题内容: 我正在开发一个使用Spring-boot,关系数据库和Elasticsearch的应用程序。 我在代码的2个不同位置使用JSON序列化: 在REST API的响应中。 当代码与Elasticsearch交互时。 我在Elasticsearch中需要一些属性,但我想向应用程序用户隐藏(例如,来自关系数据库的内部ID)。 这是一个实体的例子: 问题 :当对象持久化在Elasticsearc

  • 使用上面的代码片段,是否可以测试忽略调用IgnoreCall的方法。ignoreMethod(Bean)而不需要将整个语句置于布尔条件下? 以下是单元测试代码片段: 注意事项: 重构。即使是糟糕的OO设计,重构也是代价高昂的 方法签名被锁定,除非另一个模式适用于替换 尝试使用Mockito。当和PowerMockito时。在目标静态方法上执行时,存根在运行时调试上不起作用

  • 我已经创建了服务器过滤器,它计算响应大小。它通过创建响应包装器来实现这一点,该包装器将与Apache Commons包装在一起。此外,包装器创建带有包装流的PrintWriter。因此,理论上,无论使用什么方法来创建实际输出,都应该通过CountingOutputStream。 问题是,虽然整个过程对于典型的servlet请求都有效,但对于静态内容却失败了。准确地说,过滤器接收请求,创建响应包装,

  • 我正在为RESTAPI建立一个Laravel项目。基本上,我将用户分为两个表,用户和管理员(模型名)。我想使用默认的Laravel身份验证框架通过web guard对管理员进行身份验证,并使用JWT(tymondesigns提供的包)通过api guard对用户进行身份验证。一切都很顺利。我配置了软件包,在app/auth.php中设置了防护和提供者,并使其几乎正常工作。 我现在可以通过Auth