Java 如何在JBoss 7.1.1中启用查询缓存
我曾在JBoss7.1.1中尝试过启用查询缓存,但运气不好 我在代码中添加了以下内容:Java 如何在JBoss 7.1.1中启用查询缓存,java,caching,jpa,jboss,infinispan,Java,Caching,Jpa,Jboss,Infinispan,我曾在JBoss7.1.1中尝试过启用查询缓存,但运气不好 我在代码中添加了以下内容: TypedQuery<Currency> query = entityManager.createNamedQuery("getCurrency",Currency.class); query.setParameter("code", code); query.setHint("javax.persistence.cache.storeMode", CacheStoreMode.REFRESH);
TypedQuery<Currency> query = entityManager.createNamedQuery("getCurrency",Currency.class);
query.setParameter("code", code);
query.setHint("javax.persistence.cache.storeMode", CacheStoreMode.REFRESH);
query.setHint("javax.persistence.cache.retrieveMode", CacheRetrieveMode.USE);
query.setHint("org.hibernate.cacheable", true);
我的persistence.xml中包含以下内容:
<persistence-unit name="cache_persistence">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:jboss/datasources/cache</jta-data-source>
<class>com.unwire.cache.model.CacheTest</class>
<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
<properties>
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.hbm2ddl.auto" value="none" />
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.use_query_cache" value="true"/>
<property name="hibernate.generate_statistics" value="true"/>
</properties>
</persistence-unit>
org.hibernate.ejb.HibernatePersistence
java:jboss/datasources/cache
com.unwire.cache.model.CacheTest
启用\u选择性
当我在服务器上运行war文件时
实体已缓存,但从未使用查询缓存
我在这里上传了文件:在我的代码中(ear存档,但这不会有什么区别),我只是:
query.setHint("org.hibernate.cacheable", true);
query.setHint("org.hibernate.cacheMode", "NORMAL");
及
启用\u选择性
没有任何额外的东西(比如你有),它就可以工作了。当然,您必须根据查询的相同参数测试缓存。好的,我也尝试了org.hibernate.cacheable作为唯一的提示。没有luckI使用正确的数据源和表运行war文件。并执行当前在currency表中查找DKK的命令。您可以看到,每次在同一JTA会话/事务中调用该SQL时都会调用它(使用相同的参数)。还检查到达DB层的SQL查询(不确定hibernate显示的记录的SQL查询)。在jboss社区中找到了答案,我在那里提出了问题:query.setHint(“org.hibernate.cacheable”,true);setHint(“org.hibernate.cacheMode”,“NORMAL”);忘了贴了,现在已经解决了
query.setHint("org.hibernate.cacheable", true);
query.setHint("org.hibernate.cacheMode", "NORMAL");
<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
<properties>
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.use_query_cache" value="true"/>
<property name="hibernate.generate_statistics" value="true" />
</properties>