EntityManager JDBC连接用法

时间:2015-07-06 19:37:46

标签: java jpa ejb persistence

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

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

根据我的理解,每种方法都代表不同的交易 我很难搞清楚等价的东西 使用普通JDBC的代码可能是,特别是在JDBC连接使用方面。

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

1 个答案:

答案 0 :(得分:1)

与大多数情况一样:这取决于。

在你的情况下,如果在不同的事务中调用方法,你会得到每个bean EntityManager

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

  

是否在每种方法结束时发出了提交?

不,在每次交易结束时。如果您的方法开始新的交易,那么是。

  

是否为每种方法创建并关闭了新连接?

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

  

实现可以使用连接池是什么意思?

我想我并不完全理解你的问题。

根据您的容器,您通常会处理连接池。在您的案例中EntityManager也是如此。

连接池是一种重复使用相同物理连接的方法,如前所述,减少连接/断开开销。

如果有些事情仍不清楚,请告诉我。