posts - 325,  comments - 25,  trackbacks - 0
          當首次作Insertupdatedeleteselect時,新產生的object在session關閉之前將自動裝載到session級別的緩存區,如果,AP使用了二級緩存,同樣也會裝入到二級緩存。所以當數據量大時,就會出現outofmemory情況。
          1.批理插入
              方式一:
                  在hibernate.cfg.xml中設置批量尺寸
                  <property name="hibernate.jdbc.batch_size">50</property>
                  關閉二級緩存
                  <property name="hibernate.cache.use_second_level_cache">false</property>
              Session session=SessionFactory.openSession();
              Transaction tx=session.beginTransaction();
              for(int i=0;i<1000;i++)
              {
                  Customer customer=new Customer();
                   session.save(customer);
              if(i%50==0)
                  {
                      session.flush();
                      session.clear();
                    }
               }
                  tx.commit();
                  session.close();

          方式二:繞過hibernate,直接使用JDBC進行批量插入
                  Session session=SessionFactory.openSession();
              Transaction tx=session.beginTransaction();
              Connection conn=session.connection();
              PreparedStatement stmt=conn.prepareStatement("insert into orders(orderno) values (?)");
              for(int i=0;i<1000;i++)
              {
                  stmt.setString(1,"a"+i);
                  stmt.addBatch();
              }
              stmt.executeBatch();
              ts.commit();
              session.close();
          二、批量更新
              hibernate.cfg.xml中配置:
              <property name="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQuetyTranslatorFacotry</property>
              如,批量更新所有顧客聯系電話中的空格
           方式一:
             Session session=SessionFactory.openSession();
              Transaction tx=session.beginTransaction();
              Query query=session.createQuery("update Customer set phone=Trim(phone)");
              query.executeUpdate();
              tx.commit();
              session.close();
          方式二:繞過hibernate,通過jdbc
              Session session=SessionFactory.openSession();
              Transaction tx=session.beginTransaction();
               Connection conn=session.connection();
              Statment stmt=conn.createSatement();
              stmt.executeUpdate("update Customer set phone=Trim(phone)");
              tx.commit();
              session.close();
          三、批量刪除
              hibernate.cfg.xml中配置:
              <property name="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQuetyTranslatorFacotry</property>
              如,批量更刪除所有ID小于5000的顧客
           方式一:
             Session session=SessionFactory.openSession();
              Transaction tx=session.beginTransaction();
              Query query=session.createQuery("delete Customer where id<5000");
              query.executeUpdate();
              tx.commit();
              session.close();
          方式二:繞過hibernate,通過jdbc
              Session session=SessionFactory.openSession();
              Transaction tx=session.beginTransaction();
               Connection conn=session.connection();
              Statment stmt=conn.createSatement();
              stmt.executeUpdate("delete from Customer where id<5000");
              tx.commit();
              session.close();
          posted on 2008-05-25 23:01 長春語林科技 閱讀(3053) 評論(0)  編輯  收藏 所屬分類: hibernate
          <2008年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

           

          長春語林科技歡迎您!

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 武平县| 新民市| 古交市| 海宁市| 万山特区| 大丰市| 苏尼特左旗| 伽师县| 桐乡市| 太康县| 西平县| 天长市| 许昌县| 湘阴县| 封丘县| 灌南县| 上杭县| 天镇县| 宁南县| 麻城市| 九江县| 连城县| 山阴县| 渭南市| 潍坊市| 抚宁县| 广南县| 台前县| 册亨县| 建宁县| 沙坪坝区| 惠安县| 临朐县| 聂荣县| 沿河| 凌海市| 化州市| 哈巴河县| 兰坪| 尼勒克县| 建昌县|