Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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 web应用程序是否只包含一个hibernate会话以及如何清除此hibernate会话?_Java_Spring_Hibernate - Fatal编程技术网

java web应用程序是否只包含一个hibernate会话以及如何清除此hibernate会话?

java web应用程序是否只包含一个hibernate会话以及如何清除此hibernate会话?,java,spring,hibernate,Java,Spring,Hibernate,我在一个请求中保存和检索数据库中的对象时遇到问题。 我想清除hibernate会话的缓存,以获取数据库中更新的实体。 我的代码如下所示: public class SampleController{ protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exc

我在一个请求中保存和检索数据库中的对象时遇到问题。 我想清除hibernate会话的缓存,以获取数据库中更新的实体。 我的代码如下所示:

public class SampleController{
    protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors)
        throws Exception {
        myServiceOne.doAllotsOfSaving(parameters);
        //some code enhancements to remove cache in hibernate session
        //without affecting the session of other user logged in.

        //some fields in MyEntity class contains the old values but the actual data in database is already updated

        MyEntity entity = myServiceTwo.getMyEntityByOrderNo(orderNo);
    }
}
--configurations
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocation" value="classpath:hibernate.cfg.xml" />
    <property name="hibernateProperties">
        <ref local="hibernateProperties"/>
    </property>
    <property name="entityInterceptor">
        <ref bean="auditLogInterceptor" />
    </property>
</bean>

<bean id="myServiceOne" class="com.test.service.impl.MyServiceOneImpl">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="myServiceTwo" class="com.test.service.impl.MyServiceTwoImpl">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>
--configurations
公共类采样控制器{
Submit上受保护的ModelAndView(HttpServletRequest请求、HttpServletResponse响应、对象命令、BindException错误)
抛出异常{
myServiceOne.doAllotsOfSaving(参数);
//在hibernate会话中删除缓存的一些代码增强
//不影响其他登录用户的会话。
//MyEntity类中的某些字段包含旧值,但数据库中的实际数据已更新
MyEntity entity=myServiceTwo.getMyEntityByOrderNo(orderNo);
}
}
--配置
--配置

会话工厂
是长寿命的
多线程
对象。 通常应为一个数据库创建一个
会话工厂

会话
用于获取与数据库的物理连接。
会话
对象是轻量级的,设计为在每次需要与数据库交互时实例化

会话的主要功能是为映射实体类的实例提供
CRUD
操作。在给定时间点,实例可能存在于以下三种状态之一:

transient:持久类的新实例,它与
会话
不关联,在数据库中没有表示,并且
休眠
将其视为
transient

持久化:您可以通过将临时实例与
会话关联,使其持久化。
持久化
实例在数据库中有一个表示形式,一个标识符值,并与
会话
关联

分离的:一旦我们关闭
Hibernate
会话,持久实例将成为一个
分离的
实例。

java web应用程序是否只包含一个Hibernate会话以及如何清除此Hibernate会话?

没有任何基于hibernate的应用程序必须使用多个会话。这些会话中的每个会话在执行任务时都必须关闭。如果在Hibernate的配置文件中配置会话,Hibernate可以为您管理会话。 但是,每个应用程序应该只有一个实例

要清除会话,可以调用该方法。它清除会话级缓存

不影响其他登录用户的会话

因为您有一个web应用程序,所以对于数据库事务,每个用户都有一个不同的线程。这意味着每个用户将有一个不同的hibernate会话,因此您不必担心这一点。如果通过某种方式,您对所有用户使用相同的会话,那么您做得不对,结果可能是灾难性的。一段时间后,由于会话级缓存,您将得到一个
OutOfMemoryError

必须注意,不能禁用hibernate会话级缓存。为此,您可以使用