hibernate禁用缓存

时间:2011-07-26 13:20:17

标签: java hibernate

我想禁用hibernate缓存。

session.setCacheMode(CacheMode.IGNORE)不起作用。
  query.setCacheable(false)也不起作用。

此外,我是否可以通过某种方式配置对象X,Y不会进行缓存,但是对象Z是否会进行缓存?

感谢。

3 个答案:

答案 0 :(得分:7)

您可以在从经理那里获得可重复使用的会话对象之前调用session.clear()

即。在我们的项目中,我们必须在许多hibernate会话之间同步更新(每个http会话一个)。二级缓存工作正常,但必须禁用或清除第一级(每个会话)。因此,我们创建了 SessionManager ,用于存储所有会话并按需提供。在发出电话session.clear()之前,这就解决了问题。

在你完成工作单元之前 - 一级缓存很好。

答案 1 :(得分:3)

在配置hibernate会话工厂时尝试类似的东西:

configuration.setProperty( Environment.USE_QUERY_CACHE, Boolean.FALSE.toString() );
configuration.setProperty( Environment.USE_SECOND_LEVEL_CACHE, Boolean.FALSE.toString() );
configuration.setProperty(Environment.CACHE_REGION_FACTORY,org.hibernate.cache.impl.NoCachingRegionFactory.class.getName());
configuration.setProperty(Environment.CACHE_PROVIDER,org.hibernate.cache.NoCacheProvider.class.getName());

但请注意,您无法禁用Hibernate提供的会话缓存(如果不是所有JPA实现)。如果你真的不想被Hibernate缓存,你可以驱逐它或者不使用hibernate(对你来说更简单)

至于缓存特定实体,我建议你看看javax.persistence.Cacheable,看看它是如何运作的。

答案 2 :(得分:1)

我在网上搜索过,结论是确实无法禁用会话缓存。 这很奇怪。 我自己的解决方案是在需要清除缓存时使用session.clear()。