你没有配置二级缓存
在hibernate.cfg.xml中配置
<class-cache class="com.cuangwu.oa.pojo.SysMBLiuChen" usage="read-write" region="default"/> <class-cache class="com.cuangwu.oa.pojo.SysMBLiuChen.sysMbhuanJies" usage="read-write" region="default"/>
在hibernate.cfg.xml中配置
<class-cache class="com.cuangwu.oa.pojo.SysMBLiuChen" usage="read-write" region="default"/> <class-cache class="com.cuangwu.oa.pojo.SysMBLiuChen.sysMbhuanJies" usage="read-write" region="default"/>
解决方案 »
- 关于javax.servlet.ServletResponse源代码
- JSF中如何给javaBean赋值
- struts2+hibernate3+spring2整合的问题
- 在myeclipse下如何利用数据库表或者映射文件生成持久化类?
- 哪位前辈用过log4j的不啬赐教
- 没有web.xml怎么设置welcome-file
- 学习JAVA,什么工具好些?
- ■■高分请教:对表的更新、保存操作考虑到并发时同时操作情况了吗?如何处理呢,■■
- 如何同时提供c平台和java平台的开发接口??
- 应该是很简单的问题,可是我却查不出原因,请大家帮我。。。
- 新手学习Struts的困惑~~
- 有人了解CISCO的CCM( Cisco CallCenter Management )吗
不要让不同的请求使用同一个session
我现在的情况是,同一个页面每次请求都要从数据库中读取数据(只有在一个方法中才不用重新读取),感觉没有发挥hibernate的缓存的作用. 下面是在DAO中的每个方法开始的地方获取session的方法: /**
* 取得session对象
*/
public Session openSession() {
//getHibernateTemplate().getSessionFactory();
Session s=SessionFactoryUtils.getSession(getSessionFactory(), false);
s.setFlushMode(FlushMode.AUTO);
return s;
/*
Session sin = (Session)pSession.get();
if(sin==null){
sin =SessionFactoryUtils.getSession(getSessionFactory(), false);
pSession.set(sin);
}
return (Session)sin;
*/
}
或者用aop拦截dao查询方法结合ehcache自己实现都可以。我没有做过缓存session的尝试,但为了缓存某些数据而这样干,我认为是得不偿失的行为。数据连接的长时间占用,其它session对数据的操作对缓存的这个session的影响,此session缓存的清理都是很麻烦的问题。
另外,一次缓存也并不是那么好用,只有session.load(),session.createQuery().iterate()才可以享受到一级缓存的好处,而像getHibernateTemplate().find()使用session.createQuery().list()实现,无法利用一级缓存。
我理解的持久层(具体来说)是hibernate把数据库中的记录对象化的保存在内存中,必须时持久对象才与数据库同步,并不是实时的同步呀!
和我理解的相差太远了.