有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在JBoss 7.1.1中启用查询缓存

我曾尝试在JBoss 7.1.1中启用查询缓存,但运气不佳 我在代码中添加了以下内容:

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); 

namedQuery如下所示:

@Cacheable
@Entity
@Table(name = "currency")
@NamedQuery(
    name = "getCurrency",
    query = "FROM Currency c WHERE c.iso4217code = :code"
)

我有毅力。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>

当我在服务器上运行war文件时 实体被缓存,但查询缓存从未被使用

我把文件上传到这里:http://www.filedropper.com/cachetest


共 (1) 个答案

  1. # 1 楼答案

    在我的代码(ear存档,但这不应该有什么区别)中,我只是有:

    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>
    

    而且不需要任何额外的东西(比如你有),它就可以工作。当然,您必须根据查询的相同参数测试缓存