我有一个web应用程序,我一直在使用Spring Data从iBATIS 2慢慢迁移到JPA。为什么iBATIS即使禁用了缓存,也会给出陈旧的结果?
大多数情况下,事情进展顺利,我一次只为一个域对象迁移DAO。然而,最近引起我注意的一个问题是,网站的某些部分显示陈旧的结果列表。
例如,我有一个“票证”部分,其中显示了打开票证的列表,并允许您在单独的页面上查看特定票证。当我创建新票时,我可以正确查看该票在其特定页面上。然而,直到稍后的一段时间,公开票单才似乎没有显示这张新票。
事情我已经试着排除:
- 我看到这个问题甚至在系统禁用
- 我看到,甚至当我在iBATIS的配置设置
cacheModelsEnabled="false"
这个问题MySQL的查询缓存。 - 即使我从我的sqlMap文件中完全删除
<cacheModel>
元素和cacheModel="x"
属性,我仍然看到此问题。 - 只要我重新启动应用程序,我就会看到最新的结果。
- 当我执行查询时,iBATIS应该在MySQL客户端运行,I do查看iBATIS结果中缺少的新票。
- 当我使用Spring MVC和Spring Data JPA嘲笑一个简单的票单时,我do看到新票。
我也试图排除某种奇怪的交易状态与iBATIS,但似乎并没有任何交易在这里被使用。
我错过了什么?还有什么我应该试图弄清楚这一点?或者,我应该优先使用Spring Data JPA来完全替换iBATIS层,而这似乎不受此问题的困扰?
UPDATE
现在我已经经历了很多我最近改变了与git bisect
,我已经将范围缩小到介绍Spring的org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
的变化。
所以,看起来有些交易比它应该活的更长。我会添加更多日志记录以查看是否可以确认,然后查找避免使用该过滤器的方法。
你好Pioto,看看这有助于https://groups.google.com/forum/#!searchin/mybatis-user/stale$20results|sort:relevance/mybatis-user/vhYQ6_QaMsI/ETGW-8cZStsJ – 2015-04-10 06:49:00
该链接似乎被打破,至少对我而言。您是否愿意在回答中至少解释您在那里找到的内容? – pioto 2015-04-10 14:37:54