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

           

          長春語林科技歡迎您!

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 伊金霍洛旗| 沅江市| 隆子县| 松潘县| 揭西县| 绍兴市| 驻马店市| 林周县| 乌兰县| 开江县| 获嘉县| 武义县| 邢台市| 温宿县| 邵阳市| 江源县| 精河县| 文成县| 华宁县| 西丰县| 大方县| 阿瓦提县| 老河口市| 吐鲁番市| 高淳县| 九龙坡区| 外汇| 神农架林区| 新竹县| 凤城市| 南陵县| 定陶县| 马龙县| 亚东县| 镇平县| 津市市| 垦利县| 缙云县| 和林格尔县| 高邑县| 玛纳斯县|