hibernate3学习笔记(二)|一级缓存

来源:互联网 发布:爱家网源码 编辑:程序博客网 时间:2024/06/06 01:22

 接上例:http://blog.csdn.net/kunshan_shenbin/archive/2008/09/02/2864883.aspx

修改BusinessService.java文件如下所示:

  1. package com.hb3.pack_01;
  2. import org.hibernate.Session;
  3. import org.hibernate.SessionFactory;
  4. import org.hibernate.cfg.Configuration;
  5. import com.hb3.pack_01.model.User;
  6. public class BusinessService {
  7.     public static void main(String[] args) {
  8.         
  9.         Configuration config = new Configuration().configure();
  10.         SessionFactory sessionFactory = config.buildSessionFactory();      
  11.         Session session = sessionFactory.openSession();
  12.         
  13.         User user1 = (User) session.load(User.classnew Integer(1));
  14.         User user2 = (User) session.load(User.classnew Integer(1));
  15.         System.out.println(user1 == user2);
  16.         
  17.         user1 = (User) session.load(User.classnew Integer(1));
  18.         session.evict(user1);
  19.         user2 = (User) session.load(User.classnew Integer(1));
  20.         System.out.println(user1 == user2);
  21.         user1 = (User) session.load(User.classnew Integer(1));
  22.         session.clear();
  23.         user2 = (User) session.load(User.classnew Integer(1));
  24.         System.out.println(user1 == user2);
  25.         
  26.         Session session1 = sessionFactory.openSession(); 
  27.         user1 = (User) session1.load(User.classnew Integer(1)); 
  28.         session1.close(); 
  29.         Session session2 = sessionFactory.openSession(); 
  30.         user2 = (User)session2.load(User.classnew Integer(1)); 
  31.         session2.close();
  32.         System.out.println(user1 == user2);
  33.         
  34.         session.close();
  35.         sessionFactory.close();
  36.     }
  37. }

依次打印出的结果为

true
false
false
false

 

可见:

使用session.evict或者session.clear把某个物体从缓存中移除,或者直接关闭Session,都会使缓存失效,或者说释放缓存占用的资源空间。

 

值得一提的是:在载入大量数据时,应该及时手动清除一级缓存以释放资源。

例如:

  1. Session session = sessionFactory.openSession();
  2. Transaction tx = session.beginTransaction();
  3. while(....) { // 大量載入物件時的迴圈示意
  4.     ....
  5.     session.save(someObject);
  6.     if(count % 100 == 0) { // 每100筆資料
  7.         session.flush(); // 送入資料庫
  8.         session.clear(); // 清除快取
  9.     }
  10. }
  11. tx.commit();
  12. 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中不支持这种配置方式。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 货退了卖家不退款怎么办 淘宝退了货卖家不退款怎么办 手机淘宝不显示图片怎么办 京东申请退款卖家不处理怎么办 企业网银冻结了怎么办 农行k宝坏了怎么办 手机检测不到u盾怎么办 农行有k宝怎么办信用卡 k米怎么点不了怎么办 c1驾照被扣3分怎么办 淘宝账号被黑了怎么办 淘宝卖家号虚假交易违规怎么办 扣扣申诉成功后怎么办 微信二维码收款异常怎么办 国际包裹被退回去了怎么办 京东账号手机号换了怎么办 换手机号了淘宝账号怎么办 qq登录id密码忘记怎么办 iphone商店密码忘记了怎么办 淘宝账号被限制登入怎么办 手机换号码了qq登不上怎么办 换手机了qq登不上怎么办 微信帐号和密码错误怎么办 高考生忘记登录密码怎么办 高考生登录密码丢了怎么办 高考志愿登录密码忘了怎么办 电视声音和画面不同步怎么办 苹果5s不能开机怎么办 红米手机老是闪退怎么办 苹果7plus打字卡怎么办 手机总是出现无响应怎么办 手机淘宝怎么打不开了怎么办 淘宝买东西卖家不同意退货怎么办 苹果自带浏览器不能上网怎么办 淘宝账号买不了东西怎么办 支付宝被限制登录怎么办 微信登录不上 钱怎么办 淘宝账号买家权限被限制怎么办 淘宝中店新品打不开怎么办 旺旺号被限制有退款怎么办 登陆微信收不到验证码怎么办