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 長春語林科技 閱讀(3051) 評論(0)  編輯  收藏 所屬分類: hibernate
          <2008年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

           

          長春語林科技歡迎您!

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 平定县| 景宁| 辽阳县| 阿图什市| 缙云县| 青河县| 广元市| 乌鲁木齐市| 兴隆县| 从江县| 星子县| 泊头市| 浙江省| 响水县| 镇江市| 肥城市| 雷山县| 遂平县| 云梦县| 周宁县| 乌拉特中旗| 宁南县| 焦作市| 无为县| 花莲市| 古蔺县| 望谟县| 乐平市| 新乐市| 仁寿县| 敦化市| 百色市| 抚州市| 太白县| 定陶县| 自治县| 东乌珠穆沁旗| 寻甸| 鄂伦春自治旗| 邯郸县| 铜陵市|