hibernate 二级缓存(二)
转自 http://terryjs.iteye.com/blog/751471
1 启用 Hibernate 二级缓存
Hibernate 二级缓存分为两部分, class 缓存和查询缓存,其获取对象的方式有所不同,但两者也有联系,查询缓存必须以 class 缓存为基础才能起作用,否则只会使效率更低。
我们这里使用的二级缓存是通过 ehcache 第三方插件实现的。
1.1 配置 Hibernate.cfg.xml
启用 class 缓存:
public List findByCachedQuery(final String hql) { return (List) getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Query queryObject = session.createQuery(hql); queryObject.setCacheable(true); if (getHibernateTemplate().getQueryCacheRegion() != null) { queryObject.setCacheRegion(getHibernateTemplate().getQueryCacheRegion()); } return queryObject.list(); } }, true); }
public List findByCachedQuery(final String hql) { return (List) getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Query queryObject = session.createQuery(hql); queryObject.setCacheable(true); if (getHibernateTemplate().getQueryCacheRegion() != null) { queryObject.setCacheRegion(getHibernateTemplate().getQueryCacheRegion()); } return queryObject.list(); } }, true); }
这样,将只在 session 范围内启用查询缓存,一旦该 session 结束了,那么查询缓存也将回复默认配置。
注意:使用时只支持 hql 。
4 注意事项
在使用二级缓存时,注意,所有对数据库的修改都必须走hibernate,如果从其他系统来或使用sql语句来修改数据库相关记录,那么将对二级缓存的数据不会造成影响,换句话说,缓存中的对象数据将和数据库中的不一致。
相关推荐
微微撒 2020-04-18
gwn00 2020-01-14
无情的你无情的雨 2020-07-18
dongxurr 2020-07-26
jimgreatly 2020-06-03
cnflat0 2020-04-25
技术驱动人生 2020-04-08
Justagreenonion 2020-03-27
zhiyuan0 2020-02-24
云之飞踢 2020-01-28
明月清风精进不止 2020-01-07
Justagreenonion 2020-01-05
manbucy 2014-05-20
javamagicsun 2019-12-17
栖梧桐 2019-12-13
javamagicsun 2019-12-04
GechangLiu 2016-11-23
flydoging 2019-11-05
Ashes 2019-11-05