我正在使用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:提交事务时出错
这是两个问题的混合:
Component.currentAccount()
返回的帐户实例是一个分离的实例,我用以下内容修复了该问题:
Account current = JPA.em().merge(Component.currentAccount())
答案 0 :(得分:1)
只有猜测:对象树必须与数据库结构同步。
如果删除JPA控制的bean,则必须从集合中删除它,它也可能是集合的一部分。
因此,如果该帐户是公司帐户列表的一部分或列在AccessGroup中,则必须先将这些帐户从这些元素中删除,然后才能删除该帐户。这仅在当前将其他对象加载到JPA会话中时才有效。
您发布的初始错误应该通过明确重新加载对象或使用其他人提出的持久状态重新连接对象来解决。
如果我的猜测是正确的,并且您使用了休眠,则提交失败会伴随deleted object would be re-saved by cascade
。