hibernate3学习笔记(二) 一级缓存2011-01-29 csdn博客 沈斌接上例:修改BusinessService.java文件如下所示:
1.package com.hb3.pack_01;
2.
3.import org.hibernate.Session;
4.import org.hibernate.SessionFactory;
5.import org.hibernate.cfg.Configuration;
6.
7.import com.hb3.pack_01.model.User;
8.
9.public class BusinessService {
10.
11.public static void main(String[] args) {
12.
13.Configuration config = new Configuration().configure();
14.SessionFactory sessionFactory = config.buildSessionFactory();
15.Session session = sessionFactory.openSession();
16.
17.User user1 = (User) session.load(User.class, new Integer(1));
18.User user2 = (User) session.load(User.class, new Integer(1));
19.System.out.println(user1 == user2);
20.
21.user1 = (User) session.load(User.class, new Integer(1));
22.session.evict(user1);
23.user2 = (User) session.load(User.class, new Integer(1));
24.System.out.println(user1 == user2);
25.
26.user1 = (User) session.load(User.class, new Integer(1));
27.session.clear();
28.user2 = (User) session.load(User.class, new Integer(1));
29.System.out.println(user1 == user2);
30.
31.Session session1 = sessionFactory.openSession();
32.user1 = (User) session1.load(User.class, new Integer(1));
33.session1.close();
34.Session session2 = sessionFactory.openSession();
35.user2 = (User)session2.load(User.class, new Integer(1));
36.session2.close();
37.System.out.println(user1 == user2);
38.
39.session.close();
40.sessionFactory.close();
41.}
42.}
依次打印出的结果为truefalsefalsefalse可见:使用session.evict或者session.clear把某个物体从缓存中移除,或者直接关闭Session,都会使缓存失效,或者说释放缓存占用的资源空间。值得一提的是:在载入大量数据时,应该及时手动清除一级缓存以释放资源。例如:
1.Session session = sessionFactory.openSession();
2.Transaction tx = session.beginTransaction();
3.
4.while(....) { // 大量載入物件時的迴圈示意
5.....
6.session.save(someObject);
7.if(count % 100 == 0) { // 每100筆資料
8.session.flush(); // 送入資料庫
9.session.clear(); // 清除快取10.}
11.}
12.
13.tx.commit();
14.session.close();
在SQL Server、Oracle等数据库可使用hibernate的配置文件进行配置,如:
1.....
2.<hibernate-configuration>
3.<session-factory>
4.....
5.<property name="hibernate.jdbc.batch_size">100</property>
6.....
7.</session-factory>
8.<hibernate-configuration>
注意:在MySQL中不支持这种配置方式。