我在 Hibernate 4 中使用 Spring MVC。
我的问题是当我使用 Criteria 和 list() 方法从表中获取所有记录时。
有一个第 3 方进程每 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(isolation = Isolation.READ_COMMITTED, value = "auditsTxManager")
另外,我正在使用: OpenSessionInViewFilter
我已经尝试过:
- 禁用查询缓存
- 将隔离级别更改为更高的级别
- 清除()会话
有什么建议么?
谢谢,塔尔。