播放JPA - 错误:删除分离的实例

时间:2015-03-28 20:47:14

标签: java jpa playframework persistence

我正在使用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())

1 个答案:

答案 0 :(得分:1)

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

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

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

您发布的初始错误应该通过明确重新加载对象或使用其他人提出的持久状态重新连接对象来解决。

如果我的猜测是正确的,并且您使用了休眠,则提交失败会伴随deleted object would be re-saved by cascade