7

如果我调用,连接是否仅返回到 JPA 应用程序中的连接池

entityManager.close();

?

支持实体管理器的连接可以在其生命周期内更改吗?

在此先感谢 mojoo

4

2 回答 2

5

JPA 规范没有定义这些东西,它由实现来管理连接。当事务处于活动状态时,您可以安全地假设连接在提交之前是相同的,原因很明显。一旦 txn 结束,它可能会被退回,或者可能会根据实施情况被保留(你没有提到你的)

于 2012-12-04T16:21:36.300 回答
2

这取决于 JPA 实现和配置。

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

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

您还可以将不同的连接池用于事务,而不是非事务性读取。这对 JTA 很有用,因为您可以使用非 JTA 数据源进行读取。

于 2012-12-05T14:19:25.767 回答