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配置文件所有的设置又该在什么地方设置呢? 郁闷了,
有遇到此问题的希望可以交流交流。
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配置文件所有的设置又该在什么地方设置呢? 郁闷了,
有遇到此问题的希望可以交流交流。
相关文章推荐
- Hibernate使用二级缓存时,createSQLQuery需要注意的问题
- Hibernate使用二级缓存时,createSQLQuery需要注意的问题
- Hibernate使用二级缓存时,createSQLQuery需要注意的问题
- hibernate的一级、二级和查询缓存问题
- Hibernate使用二级缓存时,createSQLQuery需要注意的问题
- Hibernate4.1.2 二级缓存问题
- JAVAWEB开发之Hibernate详解(三)——Hibernate的检索方式、抓取策略以及利用二级缓存进行优化、解决数据库事务并发问题
- Hibernate4.3.6 配置二级缓存的问题,注解方式
- Hibernate使用二级缓存时,createSQLQuery需要注意的问题
- Hibernate 二级缓存 失效问题!!!
- Hibernate使用二级缓存时,createSQLQuery需要注意的问题
- Hibernate使用二级缓存时,createSQLQuery需要注意的问题
- hibernate中cache二级缓存问题
- Hibernate使用二级缓存时,createSQLQuery需要注意的问题
- 一个Memcache+Hibernate自处理二级缓存问题
- Hibernate 一级缓存 二级缓存 1+N问题 查询缓存
- Hibernate二级缓存问题
- hibernate配置二级缓存出现的问题
- Hibernate使用二级缓存时,createSQLQuery需要注意的问题
- Hibernate使用二级缓存时,createSQLQuery需要注意的问题