Hibernate二级缓存返回陈旧数据(有时)

时间:2011-12-28 18:20:30

标签: java mysql hibernate ehcache

无法从查询和二级缓存获得一致的返回 Hibernate 3.3,ehCache 2.4.7,C3P0 0.9.1.2,MySQL(已确认查询缓存已关闭)。

插入新对象并随后获取该对象有时(大约1/4)无法返回插入的对象。我可以确认插入是通过直接数据库查询。

插入的实体注释如下:@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)

这是对主键(它是一个字符串,用户名,因为它是一个新的用户创建过程)的findById查询失败。

当它成功并且所有后续调用时,缓存命中都是清除的,并且没有按预期触发查询。

有两个可疑问题:

    实体类型的
  • stats.getSecondLevelCacheStatistics显示 缓存中的对象,但记录缓存未命中。
  • 查询显示在缓存未命中后触发,但返回失效 数据(在这种特定情况下,插入的空列表不是 返回)

我希望插入确保它进入缓存,或者即使它不起作用,错过缓存命中,然后是正确的查询。然而,未能将对象放入缓存中,以及随后的失败查询,是一个令人烦恼的组合。

1 个答案:

答案 0 :(得分:0)

希望这不是因为您设置的FlushMode会话。如您所知,如果使用FlushMode.COMMITFlushMode.MANUAL(并且未调用手动刷新),则有可能获得陈旧对象。