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

静默忽略了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”就像预期的

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

  • 我有一个SBT/Scala项目,该项目包含其依赖项“ch.qos.logback”%“logback-classic”%“1.0.13”,并包含一个logback.xml文件,其内容如下: 当我运行该程序时,得到的输出如下: ... 我启用了logback配置调试,这样您就可以看到logback声称将该类的loglevel设置为ERROR。但仍然记录了这些消息。

  • 我刚刚在两个老项目中使用了NetBeans8.0.1和GlassFish4.1,它们与NetBeans8.0和GlassFish4.0配合得很好。 JDBC资源和连接池由glassfish-resources.xml定义(由NetBeans在我使用“Create Persistent Unit”和“new Data Source”选项定义新实体时生成)。 如果我在服务器上通过asadmin的add

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