【问题标题】:Hibernate/JPA: Unexpected cascade on mergeHibernate/JPA:合并时意外级联
【发布时间】:2012-07-27 08:39:55
【问题描述】:

休眠版本:4.0.1.Final / JPA

你好,

我想合并一个分离的表。执行 entityManager.merge() 后,从数据库中选择所有子表。

子表在 parentTable 中注释为:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "parentTable")

没有级联注释。我不想在合并时级联子表。 如何禁用合并时的级联?

@Transactional
public void save() {
    entityManager.merge(parentTable); //cascades child´s here
}

仅重新选择先前已提取的子表。

谢谢 tak3shi

【问题讨论】:

  • 你找到阻止合并级联的最终解决方案了吗?

标签: hibernate jpa-2.0


【解决方案1】:

默认情况下禁用所有级联。如果您不想级联任何东西,只需不要将级联属性添加到@OneToMany 注解。

另一方面,如果您想级联除合并之外的所有其他内容,请使用以下内容:

@OneToMany(fetch = FetchType.LAZY, 
           mappedBy = "parentTable" 
           cascade = {CascadeType.DETACH, CascadeType.PERSIST, 
                      CascadeType.REFRESH, CascadeType.REMOVE})

也许还有其他一些与级联合并操作无关的问题。在这种情况下,显示实体以及创建和合并它们的代码将很有用。

【讨论】:

  • 我不使用任何级联。我也尝试只设置 CascaType.DETACH 但它仍然在合并时级联。
  • @Transactional public void save() { entityManager.merge(parentTable); //级联孩子在这里}
  • 是什么让您认为此操作导致合并发生?对列表中的实体实际执行了哪些更改?您很可能会看到与父级与其子级之间的关系状态相关的查询,而这与合并无关。保存父子关系更改是父子状态保存(在本例中是通过合并操作)状态的一部分。
  • 我已经在调试器中检查过了。仅重新选择先前已获取的子表。
  • 这对我不起作用。合并任何分离的对象时,所有关系都会自动级联。我正在使用 EclipseLink。
猜你喜欢
  • 2012-08-11
  • 1970-01-01
  • 2019-07-10
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
  • 2012-07-18
  • 2017-09-25
  • 2014-11-16
相关资源
最近更新 更多