您的位置:首页 > 其它

hibernate 二级缓存

2016-01-20 18:54 288 查看
二级缓存 可以跨session共享,

同一个sessionFactory内多个session共享。

<!-- 指定二级缓存策略为EHCache -->
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
<!-- 指定启用查询缓存 -->
<property name="hibernate.cache.use_query_cache">true</property>

一级缓存和二级缓存
一级缓存 : Session级别的缓存,默认启用
二级缓存 : SessionFactory级别的缓存,默认未启用.
启用二级缓存方法:
(1)在hiberante.cfg.xml中指定二级缓存策略,默认使用EHCache
(2)引入EHCache的配置文件,从开发包的etc目录下寻找
(3)在hbm.xml的<class>元素下使用<cache>元素指定该类型对象采用二级缓存存储.
启用查询缓存方法:
(1)在hiberante.cfg.xml中指定启用查询缓存
hibernate.cache.use_query_cache true
(2)在执行query.list()方法之前,调用query.setCacheable(true).指定该查询启用查询缓存.
如何清除缓存中的对象
session.evict();
sessionFactory.evict();
sessionFactory.evictCollection();
3.批量更新,插入操作,批量删除(HQL)
参考使用文档第13章批量操作

批量插入(Batch inserts)

如果要将很多对象持久化,你必须通过经常的调用
flush()
以及稍后调用
clear()
来控制第一级缓存的大小。

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();

for ( int i=0; i<100000; i++ ) {
Customer customer = new Customer(.....);
session.save(customer);
if ( i % 20 == 0 ) { //20, same as the JDBC batch size //20,与JDBC批量设置相同
//flush a batch of inserts and release memory:
//将本批插入的对象立即写入数据库并释放内存
session.flush();
session.clear();
}
}

tx.commit();
session.close();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: