Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java EntityManager JDBC连接使用_Java_Jpa_Ejb_Persistence - Fatal编程技术网

Java EntityManager JDBC连接使用

Java EntityManager JDBC连接使用,java,jpa,ejb,persistence,Java,Jpa,Ejb,Persistence,据我所知,每个方法代表不同的事务。 我很难弄清楚等价物是什么 使用普通JDBC的代码可能会很复杂,特别是在使用JDBC连接时 提交是否在每个方法的末尾发出? 是否为每个方法创建并关闭了新连接? 实现可以使用连接池是什么意思 与大多数情况一样:视情况而定 在您的例子中,如果在不同的事务中调用这些方法,那么每个bean将获得一个EntityManager 通常,SQL连接的获取是延迟的。因此,当EntityManager第一次需要连接时,它将从您配置的池中获取一个连接。然后,容器确保该连接对其他事务

据我所知,每个方法代表不同的事务。
我很难弄清楚等价物是什么
使用普通JDBC的代码可能会很复杂,特别是在使用JDBC连接时

提交是否在每个方法的末尾发出?
是否为每个方法创建并关闭了新连接?

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

与大多数情况一样:视情况而定

在您的例子中,如果在不同的事务中调用这些方法,那么每个bean将获得一个
EntityManager

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

提交是否在每个方法的末尾发出

不,在每笔交易结束时。如果您的方法启动了新事务,则是

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

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

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

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

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

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


如果还有什么不清楚的地方,请告诉我。

为什么要将JDBC与EntityManager一起使用?顾名思义,EntityManager显式管理实体。您不必担心JDBC,底层JPA提供程序(如Hibernate)将为您完成数据库工作。也许你可以详细说明你正在努力实现什么以及你已经尝试了什么。了解您查阅了哪些文档也很有用。由于您使用了“ejb”标记,我假设这些方法位于SLSB中,并且事务属性是默认的(
必需的
)。是吗?@Brian yes,@DuncanKinnear我不想把JPA和JDBC混为一谈,我想对它如何在引擎盖下使用JDBC连接有一个高层次的了解,因为我已经习惯了这个概念。如果你正在调查它在幕后做什么,打开你的JPA提供商的日志,看看。大多数人会在更精细的日志级别上记录他们发出的语句,准确地显示配置选项在JDBC世界中的转换。
@PersistenceContext(unitName = "myPU")
private EntityManager em;

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