EntityManager JDBC 连接使用情况

EntityManager JDBC connection usage

@PersistenceContext(unitName = "myPU")
private EntityManager em;

    public void run1()
    {
       // uses em
    }
    public void run2()
    {
       // uses em
    }

据我了解,每种方法代表不同的交易。
我很难弄清楚什么是等价物
使用普通 JDBC 的代码可能是,尤其是在 JDBC 连接使用方面。

是否在每个方法结束时发出提交?
是否为每个方法创建和关闭了新连接?
实现可以使用连接池是什么意思?

在大多数情况下:视情况而定。

在您的情况下,如果在不同的事务中调用这些方法,您将获得每个 bean 的 EntityManager

通常 SQL 连接的获取是惰性的。因此,当 EntityManager 第一次需要连接时,它将从您配置的池中获取一个。然后容器确保连接对其他事务不可用。事务完成后,commitrollback 等事务性操作也由容器管理。

Is commit issued at the end of each method ?

不,在每笔交易结束时。如果您的方法启动了新事务,那么可以。

Is a new connection created and closed for each method ?

这里也一样。如果事务正在进行中并且之前使用过来自同一池的连接,那么它将被重用。否则您将不会在其他一些操作中看到您自己的更改。如果您的方法开始新事务,那么是的,您将获得新连接(通常只是池连接周围的新包装器实例以减少 connect/disconnect 开销)并且无论结果如何,它们都会在事务结束时被释放.

What does it mean that the implemenation could use a connection pool ?

我想我没有完全理解你的问题。

根据您的容器,您通常会处理连接池。 EntityManager 你的情况也是如此。

连接池是一种反复使用相同物理连接的方法,如前所述,可以减少 connect/disconnect 开销。

如果还有什么不明白的,请告诉我。