【问题标题】:Play JPA - Error: Removing a detached instance播放 JPA - 错误:删除分离的实例
【发布时间】:2015-03-28 20:47:14
【问题描述】:

我正在使用 Play Framework 2.4 和 我收到了这个错误:

[IllegalArgumentException: Removing a detached instance models.Account#8]
 In: (...)\models\Account.java
    JPA.em().remove(this)

我的代码如下所示:


我也尝试过(正如许多其他类似问题的答案所建议的那样):

JPA.em.remove(JPA.em().merge(this);

JPA.em().remove(Account.findById(this.id));

或将@Transactional 添加到delete() 函数中。

但它们都导致

RollbackException: 提交事务时出错

.

更新 - 我的解决方案:

这是两个问题的混合体:

  1. 我错过了控制台输出中的一行,说存在来自另一个表的约束并且无法删除该帐户。
  2. Component.currentAccount() 返回的帐户实例是一个分离的实例,我通过以下方式修复了它:

    Account current = JPA.em().merge(Component.currentAccount())

【问题讨论】:

    标签: java jpa playframework persistence


    【解决方案1】:

    只是猜测:对象树必须与数据库结构同步。

    如果你删除一个 JPA 控制的 bean,你也必须从集合中删除它,它可能也是其中的一部分。

    因此,如果帐户是公司帐户列表的一部分或列在 AccessGroup 中,则必须先将其从这些元素中删除,然后才能删除帐户。这仅在那些其他对象当前加载到您的 JPA 会话中时才有效。

    您发布的初始错误应该已通过显式重新加载对象或将对象重新连接到其他人提出的持久状态来解决。

    如果我的猜测是正确的,并且您使用休眠,那么提交失败会伴随着类似deleted object would be re-saved by cascade 的内容。

    【讨论】:

      猜你喜欢
      • 2012-10-07
      • 1970-01-01
      • 2015-04-12
      • 1970-01-01
      • 2013-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-29
      相关资源
      最近更新 更多