Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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
在JavaEE环境中何时打开/关闭hibernate会话_Java_Hibernate_Jakarta Ee - Fatal编程技术网

在JavaEE环境中何时打开/关闭hibernate会话

在JavaEE环境中何时打开/关闭hibernate会话,java,hibernate,jakarta-ee,Java,Hibernate,Jakarta Ee,在http请求开始时打开,在结束时关闭,每个http请求都在一个单独的线程中处理 也许在HashMap中保存所有会话并静态访问它 任何解释hibernate会话如何工作(或它们实际上是什么)的信息都很有帮助。如果请求开始/结束时表示http请求,那么这通常是通过servlet过滤器完成的,它会为您打开/关闭会话。这种设计模式称为OpenSessionInView(过滤器)。你可以得到细节 只有当应用程序在存在Hibernate会话的同一JVM中呈现时,此模式才有用。如果数据访问层与视图渲染层驻留

在http请求开始时打开,在结束时关闭,每个http请求都在一个单独的线程中处理

也许在HashMap中保存所有会话并静态访问它


任何解释hibernate会话如何工作(或它们实际上是什么)的信息都很有帮助。

如果请求开始/结束时表示http请求,那么这通常是通过servlet过滤器完成的,它会为您打开/关闭会话。这种设计模式称为OpenSessionInView(过滤器)。你可以得到细节

只有当应用程序在存在Hibernate会话的同一JVM中呈现时,此模式才有用。如果数据访问层与视图渲染层驻留在不同的JVM上,那么在调度视图渲染请求之前,必须(急切地)获取所有必需的模型bean

如果您使用的是spring(或EJB3),则可以将会话(EntityManager)注入到数据访问类中,这样就不需要手动打开和关闭会话


理想情况下,您不需要手动打开/关闭会话/事务(因为这样可能会遗漏session.close()或tx.commit()等)。相反,使用JPA entitymanager提供的容器或使用spring为您管理会话。

使用会话有多种模式,但最常见且通常最合适的模式是在每次请求时打开和关闭会话(=线程=工作单元)


在JavaEE环境中,您通常会使用JPA。因此,通过
EntityManager
使用hibernate,它可以通过
@PersistenceContext

注入组件(如EJB或cdi管理的bean),通常在需要访问数据存储时(例如,事务开始)会话是打开的。何时关闭它有不同的模式和方法。您可以在视图(JSP)中保持会话的打开状态。但你不必这么做


e、 我们的一个项目不允许使用opensessionInView过滤器。因此,会话在事务结束后关闭。需要发送到视图的所有数据(基本上是值对象)在发送之前都已加载。

同意。此外,如果使用SpringMVC,它还提供了一个
OpenSessionInViewFilter
和一个
OpenSessionInviewWinterCeptor