阿灿JAVA

导航

hibernate4 配置,二级缓存问题hibernate.cache.region.factory_class

原文地址:http://blog.csdn.net/chaoowang/article/details/21236501

hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>  

<!DOCTYPE hibernate-configuration PUBLIC  

        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  

        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">  

<hibernate-configuration>  

<session-factory>  

<!-- Database connection settings -->  

<property name="connection.driver_class">com.mysql.jdbc.Driver</property>  

<property name="connection.url">jdbc:mysql://127.0.0.1:3306/hibernate4</property>  

<property name="connection.username">root</property>  

<property name="connection.password">root</property>  

<!-- JDBC connection pool (use the built-in) -->  

<property name="connection.pool_size">1</property>  

<!-- SQL dialect -->  

<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>  

<!-- Enable Hibernate's automatic session context management -->  

<property name="current_session_context_class">thread</property>  

<!-- Disable the second-level cache -->  

<!--<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property> 

        -->  

<!-- 配置二级缓存 -->  

<property name="hibernate.cache.use_second_level_cache">true</property>  

<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>  

<!-- hibernate3的二级缓存配置 -->  

<!-- <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property> -->  

<!-- 开启查询缓存 -->  

<property name="hibernate.cache.use_query_cache">true</property>  

<!-- Echo all executed SQL to stdout -->  

<property name="show_sql">true</property>  

<!-- Drop and re-create the database schema on startup -->  

<property name="hbm2ddl.auto">update</property>  

<mapping class="com.test.pojo.User" />  

</session-factory>  

</hibernate-configuration>  

 

注意:hibernate4和hibernate3配置不一样,hibernate4是

<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>  

 

 此处有一个疑问是:hibernate4的官方文档中,已经把class改了,但是属性名称没有改,还是hibernate.cache.provider_class,不是上面的hibernate.cache.region.factory_class,但是写成hibernate.cache.provider_class会报下面错误

org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.spi.CacheImplementor] 

说是hibernate.cache.region.factory_class属性没有配置,估计官方文档里没有把属性改过来。。。

ehcache.xml

<?xml version="1.0" encoding="UTF-8"?>  

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"  

updateCheck="false">  

    <!--  

        name:cache唯一标识   

        eternal:缓存是否永久有效   

        maxElementsInMemory:内存中最大缓存对象数  

        overflowToDisk(true,false):缓存对象达到最大数后,将缓存写到硬盘中  

        diskPersistent:硬盘持久化  

        timeToIdleSeconds:缓存清除时间   

        timeToLiveSeconds:缓存存活时间  

        memoryStoreEvictionPolicy:缓存清空策略  

        1.FIFO:first in first out 先讲先出  

        2.LFU: Less Frequently Used 一直以来最少被使用的  

        3.LRU:Least Recently Used  最近最少使用的  

    -->  

<defaultCache maxElementsInMemory="1000" eternal="false"  

timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" />  

<cache name="userCache" eternal="false" maxElementsInMemory="1000"  

overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="3600"  

timeToLiveSeconds="3600" memoryStoreEvictionPolicy="LFU" />  

</ehcache>  

 

User实体类

import javax.persistence.Entity;  

import javax.persistence.GeneratedValue;  

import javax.persistence.GenerationType;  

import javax.persistence.Id;  

import org.hibernate.annotations.Cache;  

import org.hibernate.annotations.CacheConcurrencyStrategy;  

@Entity  

@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)  

public class User {  

@Id  

@GeneratedValue(strategy=GenerationType.IDENTITY)  

private int id;  

private String name;  

private int age;  

public int getId() {  

return id;  

    }  

public void setId(int id) {  

this.id = id;  

    }  

public String getName() {  

return name;  

    }  

public void setName(String name) {  

this.name = name;  

    }  

public int getAge() {  

return age;  

    }  

public void setAge(int age) {  

this.age = age;  

    }  

}  

 

posted on 2016-09-23 14:10  阿灿JAVA  阅读(286)  评论(0)    收藏  举报