@PersistenceContext(unitName = "myPU")
private EntityManager em;
public void run1()
{
// uses em
}
public void run2()
{
// uses em
}
根据我的理解,每种方法都代表不同的交易 我很难搞清楚等价的东西 使用普通JDBC的代码可能是,特别是在JDBC连接使用方面。
是否在每种方法结束时发出提交?
是否为每种方法创建并关闭了新连接?
实现可以使用连接池是什么意思?
答案 0 :(得分:1)
与大多数情况一样:这取决于。
在你的情况下,如果在不同的事务中调用方法,你会得到每个bean EntityManager
。
通常,SQL连接的获取是懒惰的。因此,当EntityManager
第一次需要连接时,它将从您配置的池中获取一个连接。然后容器确保连接对其他事务不可用。交易完成后,commit
或rollback
等交易操作也由容器管理。
是否在每种方法结束时发出了提交?
不,在每次交易结束时。如果您的方法开始新的交易,那么是。
是否为每种方法创建并关闭了新连接?
这里也一样。如果事务正在进行且之前已使用同一池中的连接,则将重用该事务。否则,您不会在其他一些操作中看到自己的更改。如果你的方法开始新的事务,那么是的,你会得到新的连接(通常只是池化连接的新包装器实例以减少连接/断开开销),并且无论结果如何,它们都会在事务结束时被释放。 / p>
实现可以使用连接池是什么意思?
我想我并不完全理解你的问题。
根据您的容器,您通常会处理连接池。在您的案例中EntityManager
也是如此。
连接池是一种重复使用相同物理连接的方法,如前所述,减少连接/断开开销。
如果有些事情仍不清楚,请告诉我。