【问题标题】:EntityManager connections stuck at 'Idle in transaction' after persist/commit持久/提交后,EntityManager 连接卡在“事务中的空闲”
【发布时间】:2016-02-26 17:36:01
【问题描述】:

我的 EntityManager 将数据持久化/提交到 Postgres 数据库没有问题。但是,它建立的连接卡在“交易中的空闲”。这是我的代码:

public User create(User user) {

    if(logger.isDebugEnabled()) {
        logger.info("creating user: {}", user);
    }

    EntityManager entityManager = DbUtil.factory.createEntityManager();

    try {
        entityManager.getTransaction().begin();
        // Persist takes an entity instance, adds it to the context and makes that instance managed (ie future updates
        // to the entity will be tracked).
        entityManager.persist(user);
        entityManager.getTransaction().commit();
    }
    catch(RuntimeException e) {
        throw getDbException(e);
    }
    finally {
        entityManager.close();
    }

    return user;
}

知道他们为什么不关闭吗?

【问题讨论】:

    标签: java postgresql entitymanager


    【解决方案1】:

    您说持久化有效,可能您在 db 中看到了您的数据。但是你看到所有的数据,没有失败吗?您的代码不处理事务回滚,这可能是您看到连接处于“事务中空闲”状态的原因。

    如果throw getDbException(e)抛出异常,事务不会回滚。

    【讨论】:

      猜你喜欢
      • 2015-05-16
      • 1970-01-01
      • 2016-01-25
      • 1970-01-01
      • 2013-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多