1

我一直在使用二級緩存時遇到問題。以下是您需要查明問題所在的必要來源。Hibernate 3.2.0中的二級緩存final

的hibernate.cfg.xml

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

<!-- a SessionFactory instance --> 
    <session-factory> 

      <!-- User/Password --> 
      <property name="connection.username">root</property> 
      <property name="connection.password"></property> 

      <!-- Database/Dialect Settings --> 
      <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
      <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
      <property name="connection.url">jdbc:mysql://localhost:3306/hibernate_001</property> 
      <property name="show_sql">true</property> 

      <!-- Second Level Cache --> 
      <property name="hibernate.cache.use_second_level_cache">true</property> 
      <property name="hibernate.cache.use_query_cache">true</property> 
      <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>    


      <!-- mapping files --> 
      <mapping class="com.example.bean.Employee"/> 
    </session-factory> 

僱員持久性類

@Entity 
@Cacheable 
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY) 
@Table(name="employee") 
public class Employee { 
    @GeneratedValue 
    @Id 
    @Column(name="id") 
    private int id; 
    @Column(name="first_name") 
    private String firstName; 
    @Column(name="last_name") 
    private String lastName; 
    @Column(name="email") 
    private String email; 
    @Column(name="registration_date") 
    private String registrationDate; 
    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 
    public String getFirstName() { 
     return firstName; 
    } 
    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 
    public String getLastName() { 
     return lastName; 
    } 
    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 
    public String getEmail() { 
     return email; 
    } 
    public void setEmail(String email) { 
     this.email = email; 
    } 
    public String getRegistrationDate() { 
     return registrationDate; 
    } 
    public void setRegistrationDate(String registrationDate) { 
     this.registrationDate = registrationDate; 
    } 
} 

堆棧跟蹤

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version). 
log4j:WARN Please initialize the log4j system properly. 
org.hibernate.HibernateException: could not instantiate RegionFactory [org.hibernate.cache.ehcache.EhCacheRegionFactory] 
at   org.hibernate.cfg.SettingsFactory.createRegionFactory(SettingsFactory.java:402) 
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:270) 
at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2163) 
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2159) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1383) 
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954) 
at com.example.dao.HibernateSessionFactory.getSessionFactory(HibernateSessionFactory.java:11) 
at com.example.control.Main.main(Main.java:12) 
Caused by: java.lang.ClassNotFoundException: org.hibernate.cache.ehcache.EhCacheRegionFactory 
at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:190) 
at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:192) 
at org.hibernate.cfg.SettingsFactory.createRegionFactory(SettingsFactory.java:397) 
... 7 more 

無法創建會話工廠

+2

錯誤的主要原因是'ClassNotFoundException: org.hibernate.cache.ehcache.EhCacheRegionFactory'。您是否包含EHCache支持所需的庫? – OO7

+1

另外,如果你正在開始一個新項目,爲什麼你使用3.2版本,它已經完全過時了?從最新版本開始。並使用註釋來定義您的映射。 –

回答

0

假設它是一個基於Maven的項目,添加下面的依賴在你的pom.xml:

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-ehcache</artifactId> 
    <version>4.0.1.Final</version> 
</dependency>