Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
为什么在hibernate中创建会话以从数据库获取数据?_Hibernate_Jpa - Fatal编程技术网

为什么在hibernate中创建会话以从数据库获取数据?

为什么在hibernate中创建会话以从数据库获取数据?,hibernate,jpa,Hibernate,Jpa,为什么我们在hibernate中打开会话从数据库中获取数据而不保留它,而在JPA中,我们使用EntityManager加载数据,但我们不打开事务只是从数据库获取数据。好问题。在本机Hibernate中,会话与JPA中的EntityManager具有相同的功能,那么为什么大多数Hibernate示例在读取数据时都有事务 如果您刚刚打开了一个会话,并且只执行一个读取查询,那么您应该不会有问题。然而,事实并非如此。问题是,如果使用的是现有会话,select查询可能会导致预查询刷新,最终可能会插入。 你

为什么我们在hibernate中打开会话从数据库中获取数据而不保留它,而在JPA中,我们使用EntityManager加载数据,但我们不打开事务只是从数据库获取数据。

好问题。在本机Hibernate中,会话与JPA中的EntityManager具有相同的功能,那么为什么大多数Hibernate示例在读取数据时都有事务

如果您刚刚打开了一个会话,并且只执行一个读取查询,那么您应该不会有问题。然而,事实并非如此。问题是,如果使用的是现有会话,select查询可能会导致预查询刷新,最终可能会插入。 你可能还想看看这个

就我个人而言,我几乎从未在EntityManager或会话上显式调用getTransaction()。最好使用容器管理器EntityManager/Session和声明性事务(如Spring@Transactional或J2EEs@TransactionaAttribute)。你可以通过看这个来了解它是如何工作的。这个示例有点过时,因为您将使用spring数据JPARepositories而不是编写自己的DAO