什么时候连接返回到JPA应用程序中的连接池?

时间:2012-12-04 16:17:05

标签: java jpa database-connection connection-pooling entitymanager

如果我调用

,则连接仅返回到JPA应用程序中的连接池
entityManager.close();

支持实体经理的连接在其生命周期中是否会发生变化?

提前谢谢 mojoo

2 个答案:

答案 0 :(得分:5)

JPA规范没有定义这样的东西,而是由管理连接的实现决定。当事务处于活动状态时,出于显而易见的原因,您可以安全地假设连接在提交之前是相同的。一旦txn结束,它可以被交还,或者可以根据实施情况持有(并且你没有提到你的)

答案 1 :(得分:2)

这取决于JPA的实现和配置。

默认情况下,在EclipseLink中,连接仅在活动(脏)事务的持续时间内保持。即从第一次修改或锁定,直到提交或回滚。对于非事务性查询,按需获取连接,并在查询执行后返回。这允许最大限度地使用连接池。所以,通常em.close()什么都不做。

您可以使用“eclipselink.jdbc.exclusive-connection.mode”持久性单元属性对其进行配置。 “Always”将保持EntityManager生命周期的连接。

您还可以使用不同的连接池进行事务处理,而不使用非事务性读取。这对JTA非常有用,因为您可以使用非JTA DataSource进行读取。