使用hibernate和ehcache进行本机SQL缓存

时间:2014-05-04 14:26:09

标签: java hibernate ehcache

如何缓存已执行的本机SQL的结果,查询的结果可以是数字或简单的字符串,因此我没有匹配的实体。

2 个答案:

答案 0 :(得分:0)

在你的查询中你应该使用query.setHint(“org.hibernate.cacheable”,“true”);例如:

javax.persistence.Query query =  entityManager.createQuery("...");
query.setHint("org.hibernate.cacheable", "true");

也有ehcache.xml,例如

<ehcache>
    <diskStore path="java.io.tmpdir"/>

    <defaultCache 
        maxElementsInMemory="100"
        maxElementsOnDisk="500"
        external="false"
        overflowToDisk="true" 
        memoryStoreEvictionPolicy="LRU"
    />

.....
</ehcache>

当然还有persistence.xml,例如

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>...</class>
        <properties>
            <property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.SingletonEhCacheProvider"/>
            <property name="hibernate.cache.use_query_cache" value="true"/>
            <property name="hibernate.cache.use_second_level_cache" value="true"/>
            <property name="hibernate.cache.provider_configuration_file_resource_path" value="/ehcache.xml"/>
            <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy"/>

.....
        </properties>
    </persistence-unit>
</persistence>

答案 1 :(得分:0)

我使用Heimdall数据。它充当透明的sql缓存。该产品提供缓存建议,为开发人员留下猜测。