由于超时错误,JPA EntityManager 休眠异常 "detached entity passed to persist"

JPA EntityManager hibernate exception "detached entity passed to persist" due to timeout error

我支持一个经常在持久操作期间将大量数据保存到数据库的应用程序。应用程序 运行s 流畅,数据量较少。但是当我尝试保存大量数据时,在 30 分钟后,它会抛出休眠异常 "detached entity passed to persist"

我搜索了各种解释,发现这主要有两个原因:

  1. 写错了code/incorrectly定义的实体
  2. 对象在一定超时后分离

我相信这不是代码问题,因为应用程序已经 运行宁宁没有问题,数据量较少。

假设这是一个超时问题,我不确定超时是在哪里定义的,以及决定何时应该分离对象的超时。

如有任何帮助,我们将不胜感激。我们使用 Hibernate、Seam 和 JBoss 7 来 运行 应用程序

如果您正在使用 Seam Managed Persistence Context(所谓的 SMPC),那么实体管理器(以及休眠会话)可能会存储在对话上下文中,因此超时可能是对话上下文,这可以进行调整在 components.xml 中有以下...

<core:manager conversation-id-parameter="cid" conversation-timeout="3600000" />

以毫秒为单位设置

经过大量试验和错误后,我发现可以通过修改 standalone.xml 中的协调器环境默认超时来更改它,如下所示:

<subsystem xmlns="urn:jboss:domain:transactions:1.3"> <core-environment> <process-id> <uuid/> </process-id> </core-environment> <recovery-environment socket-binding="txn-recovery-environment" status-socket-binding="txn-status-manager"/> <coordinator-environment default-timeout="300"/> </subsystem>