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