Hibernate Criteria列表不会立即返回新记录

时间:2014-06-15 14:34:31

标签: spring hibernate spring-mvc open-session-in-view

我使用Spring MVC和Hibernate 4。
我的问题是当我使用Criteria和list()方法从表中获取所有记录时。

每隔1秒就有一个第三方进程将记录插入表中,每次用户按下"刷新"表示该表的屏幕。按钮。
当我在同一个会话中使用Criteria.list()时,我得到了延迟45秒的记录。最小。这意味着用户只能看到在45秒之前插入的记录。

这是标准用途:

Criteria crit = getCurrentSession().createCriteria(Audit.class);
return ((List<Audit>) crit.list());

这是休眠+交易设置:

Session Factory:
<bean id="auditsSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="abstractDataSource"/>
        <property name="packagesToScan" value="com.java.model" />
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
                <!-- Only for debug -->
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.connection.charSet">UTF-8</prop>
            </props>
        </property>
    </bean>

Transcation Manager:
<bean id="auditsTxManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="auditsSessionFactory"/>
    </bean>

@Transactional setting:

@Transactional(isolation = Isolation.READ_COMMITTED, value = "auditsTxManager")

另外,我正在使用:OpenSessionInViewFilter

我已经尝试过:

  • 禁用查询缓存
  • 将隔离级别更改为更高级别
  • clear()session

有什么建议吗?

谢谢, 塔尔。

1 个答案:

答案 0 :(得分:0)

查询缓存不相关,因为它使用标准。

有一个会话缓存,你是否为每个请求创建一个新会话?

您确定插件是否正确插入新数据/并且网页显示正确无问题。而且没有二级缓存?