您的位置:首页 > 其它

Hibernate二级缓存问题

2011-11-16 23:30 309 查看
在加入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配置文件所有的设置又该在什么地方设置呢? 郁闷了,

有遇到此问题的希望可以交流交流。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: