Hibernate二级缓存问题

在尝试配置Hibernate二级缓存时,遇到了net.sf.ehcache.CacheException,原因是ehcache.xml文件中存在不正确的元素嵌套。删除ehcache.xml配置文件后,虽然解决了编译问题,但新的疑问是这些缓存设置如何在其他地方实现。寻求解决方案并与遇到同样问题的开发者交流。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在加入ehcache.xml配置文件时所产生的编译错误异常!

   net.sf.ehcache.CacheException: Error configuring from file:/F:/Struts2/Hibernate21/bin/ehcache.xml. Initial cause was Error configuring from input stream. Initial cause was null:5: Element <ehcache> does not allow nested <defaultCatch> elements.
 at net.sf.ehcache.config.ConfigurationFactory.parseConfiguration(ConfigurationFactory.java:95)
 at net.sf.ehcache.config.ConfigurationFactory.parseConfiguration(ConfigurationFactory.java:131)
 at net.sf.ehcache.CacheManager.parseConfiguration(CacheManager.java:241)
 at net.sf.ehcache.CacheManager.init(CacheManager.java:190)
 at net.sf.ehcache.CacheManager.<init>(CacheManager.java:183)
 at org.hibernate.cache.EhCacheProvider.start(EhCacheProvider.java:131)
 at org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge.start(RegionFactoryCacheProviderBridge.java:72)
 at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:221)
 at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1341)
 at com.hibernate.app.HibernateTest.<clinit>(HibernateTest.java:23)
Exception in thread "main" java.lang.NullPointerException
 at com.hibernate.app.HibernateTest.main(HibernateTest.java:32)

 

  ehcache.xml文件内容:   

<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
 <diskStore path="d:/ehcache"/>
 <defaultCatch maxElementsInMemory="200" eternal="false"
 timeToIdleSeconds="50" timeToLiveSeconds="60" overflowToDisk="true"/>
 
 <cache name="com.hibernate.app.Student" maxElementsInMemory="200" eternal="false"
 timeToIdleSeconds="50" timeToLiveSeconds="60" overflowToDisk="true"/>

</ehcache>

 

 

 

hibernate.cfg.xml配置:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

<session-factory>
 <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
 <property name="connection.url">jdbc:mysql://localhost:3306/test</property>
 <property name="connection.username">root</property>
 <property name="connection.password">mysql</property>
 <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
 <property name="myeclipse.connection.profile">record</property>
 <property name="hbm2ddl.auto">update</property>    
 <property name="show_sql">true</property>
 <!-- 二级缓存的使用 -->
 <property name="hibernate.cache.use_second_level_cache">true</property>
 <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
 <mapping resource="com/hibernate/app/Student.hbm.xml" />
 <mapping resource="com/hibernate/app/Team.hbm.xml" />

</session-factory>

</hibernate-configuration>

 

 

测试代码:

 

package com.hibernate.app;

import java.util.List;

import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

/**
 * author:Jack-zk Email:zhouke8888@163.com time:2011-11-12-上午09:17:19
 */
public class HibernateTest {

 private static SessionFactory sessionFactory;

 static {
  try {

   sessionFactory = new Configuration().configure()
     .buildSessionFactory();

  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 
 public static void main(String[] args){ 
   //启动session
   Session session = sessionFactory.openSession();
   Transaction tran = null;
   
   try{
    //开启事物
    tran = session.beginTransaction();
    
    /*Team team = new Team();
    team.setTeamName("team1");
    //向数据库中插入1200条数据
    for(int i = 0;i<1200;i++){
     
     Student stu = new Student();
     stu.setAge(20);
     stu.setName("zhangsan"+i);
     stu.setCardId("1002");
     stu.setTeam(team);
     
     team.getStudents().add(stu);
    }
    session.save(team);
    
    //提交事物
    tran.commit();*/
    System.out.println("从数据库中取得数据,将有sql语句生成begin!----------------------------------------");
    
    Session session1 = sessionFactory.openSession();
    Transaction tran1 = session1.beginTransaction();
    
    List<Student> list = session.createQuery("From Student s order by s.name asc").list();
    for(Student stu : list){
     
     System.out.println(stu.getName());
    }
    System.out.println("Over!----------------------------------------");
    tran1.commit();
    
    
    
    Session session2 = sessionFactory.openSession();
    Transaction tran2 = session1.beginTransaction();
    
    Student stu1 = (Student)session2.get(Student.class, "4028814d33acdb5b0133acdb5fe7000c");
    Student stu2 = (Student)session2.get(Student.class, "4028814d33acdb5b0133acdb5fe7000d");
    System.out.println("以下两条为缓存中取得的数据,因为没有sql语句被执行----------------------------------------");
    System.out.println(stu1.getName());
    System.out.println(stu2.getName());
    
    tran2.commit();
    
    
    
   }catch(Exception e){
    e.printStackTrace();
    if(null != tran){
     tran.rollback();
    }
   }finally{
     
    session.close();
   }
  }
 }

         最后万般无赖,我删除ehcache.xml配置文件,编译成功,但是接下来又有了新的问题,就是上边ehcache.xml配置文件所有的设置又该在什么地方设置呢?   郁闷了,

有遇到此问题的希望可以交流交流。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值