【问题标题】:JPA EntityManager hibernate exception "detached entity passed to persist" due to timeout error由于超时错误,JPA EntityManager 休眠异常“分离的实体传递给持久化”
【发布时间】:2017-06-25 13:44:15
【问题描述】:

我支持在持久化操作期间经常将大量数据保存到数据库的应用程序。该应用程序运行平稳,数据量较少。但是当我尝试持久化大量数据时,在 30 分钟后,它会抛出休眠异常“分离的实体传递给持久化”

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

  1. 错误编写的代码/错误定义的实体
  2. 对象在一定的超时后被分离

我相信这不是代码问题,因为应用程序一直在运行,数据量较少。

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

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

【问题讨论】:

    标签: hibernate jboss7.x seam entitymanager hibernate-entitymanager


    【解决方案1】:

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

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

    以毫秒为单位

    【讨论】:

    • #2 你肯定走在正确的轨道上,30 分钟似乎是其中一个库中定义的某些参数的默认值。也请查看您的网络拓扑。看看您是否可以在一台计算机上测试运行整个应用程序以及数据库并避免任何网络跃点。
    【解决方案2】:

    经过大量的试验和错误,我发现可以通过修改standalone.xml中的coordinator-environment default-timeout来改变它,如下所示:

    <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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-05
      • 2018-09-09
      • 2020-12-27
      • 2013-06-26
      • 2018-09-10
      • 2017-09-04
      • 1970-01-01
      相关资源
      最近更新 更多