Java Hibernate4和二级缓存:我的理解有什么错?
我已经开始使用Hibernate4和二级缓存。 根据文档,配置非常简单:Java Hibernate4和二级缓存:我的理解有什么错?,java,hibernate,second-level-cache,Java,Hibernate,Second Level Cache,我已经开始使用Hibernate4和二级缓存。 根据文档,配置非常简单: <property name="hibernate.cache.use_second_level_cache" value="true"></property> <property name="hibernate.cache.use_query_cache" value="true"></property> <property name="hibernate.cac
<property name="hibernate.cache.use_second_level_cache" value="true"></property>
<property name="hibernate.cache.use_query_cache" value="true"></property>
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory"></property>
我运行了4次命名查询,不幸的是我看到hibernate运行了4次
EntityManagerFactory emf = Persistence.createEntityManagerFactory("test");
EntityManager em = emf.createEntityManager();
Query query = em.createNamedQuery(SimplePerson.FIND_BY_NAME);
query.setParameter("name", "BOB");
List result = query.getResultList();
result = query.getResultList();
result = query.getResultList();
result = query.getResultList();
输出:
Hibernate: select simplepers0_.id as id0_, simplepers0_.name as name0_ from SimplePerson simplepers0_ where simplepers0_.name=?
Hibernate: select simplepers0_.id as id0_, simplepers0_.name as name0_ from SimplePerson simplepers0_ where simplepers0_.name=?
Hibernate: select simplepers0_.id as id0_, simplepers0_.name as name0_ from SimplePerson simplepers0_ where simplepers0_.name=?
Hibernate: select simplepers0_.id as id0_, simplepers0_.name as name0_ from SimplePerson simplepers0_ where simplepers0_.name=?
我对二级缓存的理解有什么错?
为什么Hibernate会运行查询4次?
我是否错过了一些配置
提前感谢,,
Michael您的配置中不应该也包含以下内容:
<cache usage="read-write"/>
另外,我忘了您需要在命名查询上设置cacheable=“true”
属性,或者
setCacheable(true)
同时运行查询本身
注意:不确定hibernate中的语法是什么,但在Nhibernate中,它的SetCacheable(true)SetCacheable方法在javax.persistence.Query中不可用,因此您需要向命名查询添加缓存提示(或调用setHint):
说,使用查询缓存已经跳过了鲨鱼,如果你甚至会考虑它。现在有了更好的方法,比如Spring缓存抽象。
+1阅读一篇很棒的文章,并解释查询缓存。<cache usage="read-write"/>
@NamedQueries({
@NamedQuery(
name="SimplePerson.findByName",
query="select p from SimplePerson p where p.name = :name",
hints = { @QueryHint(name = "org.hibernate.cacheable", value = "true") })
})