2016-02-26 57 views
0

My EntityManager持久/提交数据到Postgres数据库没有问题。但是,它所造成的连接陷入了'闲置在交易中'。这里是我的代码:EntityManager连接卡在'Idle in transaction'中持久/提交后

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

任何想法他们为什么不关闭?

回答

0

你说持久的作品,你可能会看到你的数据在分贝。但是你看到所有的数据,没有失败吗?你的代码不处理事务回滚,这可能是你看到'Idle in transaction'状态的连接的原因。

如果throw getDbException(e)引发异常,则事务不会回滚。