【问题标题】:When is a connection returned to the connection pool in a JPA application?何时将连接返回到 JPA 应用程序中的连接池?
【发布时间】:2012-11-22 07:57:21
【问题描述】:

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

entityManager.close();

?

支持 entitymanger 的连接能否在其生命周期内更改?

提前致谢 魔珠

【问题讨论】:

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


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2023-04-07
      • 2015-03-28
      • 2011-11-07
      • 1970-01-01
      • 2012-06-14
      • 2014-08-15
      • 2013-05-23
      • 2012-09-25
      • 1970-01-01
      相关资源
      最近更新 更多