1 / 16
文档名称:

hibernate缓存.doc

格式:doc   大小:421KB   页数:16页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

hibernate缓存.doc

上传人:今晚不太方便 2017/9/6 文件大小:421 KB

下载得到文件列表

hibernate缓存.doc

相关文档

文档介绍

文档介绍:hibernate缓存
缓存:在word中敲入一些字符...;在线视频网站;
Session级缓存(一级缓存)
一级缓存很短和session的生命周期一致,因此也叫session级缓存或事务级缓存
支持一级缓存的方法 get() load() iterate()(查询实体对象)
public void queryNewsIterate() {
();
Query query = (" from News n where <=5");
Iterator<News> itor = (); // 一个一个遍历实体对象
while (()) {
News news = ();
(() + ", 是"
+ ().getTypeName() + " 类型的.");
}
("*******************");
query = (" from News n where <=5");
itor = (); // 一个一个遍历实体对象
while (()) {
News news = ();
(() + ", 是"
+ ().getTypeName() + " 类型的.");
}
// ();//放在一个集合
().commit();
}
Session缓存是实体级别的缓存,就是只有在查询对象级别的时候才使用,如果使用HQL和SQL是查询属性级别的,是不使用一级缓存的
管理一级缓存:(), ()
如何避免一次性大量的实体数据入库导致内存溢出先flush,再clear

一级缓存的管理:
1、在进行大批量数据一次性插入的时候:
public void ount() {
();

for (int i = 1; i < 5000; i++) {
Account a=new Account();
("测试账户"+i);
(i+1);


(a);
//在这里定时根据特定的条件将缓存中的对象清除
if(i%20==0)
{
();
();
}

}
().commit();
}
2、在进行大批量数据一次性更新的时候,会占用非常多的内存来缓存被更新的对象。这时就应该阶段性地调用clear()方法来清空一级缓存中的对象,控制一级缓存的大小,以避免产生内存溢出的情况.
思考如下问题:我们想批量修改Student表中的学生的年龄,如每人加1:
?
解决方案:
先进行 flush(); clear(); evict();
用原始的jdbc代码去操作:批量执行相同相似的sql语句的方法:
Update 表 set 列=? where id=?
Insert ....
***@Test
public void ountJdbc() {
try {
("");
conn=("");
(false);

pstmt=("insert into account(name,count) values(?,?)");

for (int i = 1; i < 5000; i++) {
Account a = new Account();
("测试账户" + i);
(i + 1);

(1,