<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    MDA/MDD/TDD/DDD/DDDDDDD
    posts - 536, comments - 111, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    hibernate批量處理(轉)

    Posted on 2007-09-27 14:22 leekiang 閱讀(1471) 評論(0)  編輯  收藏 所屬分類: hibernate
    在做大批量處理時,容易出現outofmemory的情況,分析及解決如下
    (1)原因
    ?當首次作Insertupdatedeleteselect時,新產生的object在session關閉之前將自動裝載到session級別的緩存區,如果,AP使用了二級緩存,同樣也會裝入到二級緩存。所以當數據量大時,就會出現outofmemory情況。
    ?
    (2)解決方法
    ?
    (A)批量插入(Batch inserts)/批量更新(Batch updates)
    必須通過經常的調用 flush() 以及稍后調用 clear() 來控制第一級緩存的大小
    如:
    Session session = sessionFactory.openSession();
    Transaction tx = session.beginTransaction();
    ??
    for ( int i=0; i<100000; i++ ) {
    ??? Customer customer = new Customer(.....);
    ??? session.save(customer);
    ??? if ( i % 20 == 0 ) {
    //20, same as the JDBC batch size //20,與JDBC批量設置相同
    ??????? //flush a batch of inserts and release memory:
    ??????? //將本批插入的對象立即寫入數據庫并釋放內存
    ??????? session.flush();
    ??????? session.clear();
    ??? }
    }
    ??
    tx.commit();
    session.close();
    ?
    (B)大批量更新/刪除(Bulk update/delete)
    使用HQL語言
    ?
    Session session = sessionFactory.openSession();
            Transaction tx = session.beginTransaction();
    
            String hqlUpdate = "update Customer set name = :newName where name = :oldName";
            int updatedEntities = s.createQuery( hqlUpdate )
                                .setString( "newName", newName )
                                .setString( "oldName", oldName )
                                .executeUpdate();
            tx.commit();
            session.close();

    執行一個HQL DELETE,同樣使用 Query.executeUpdate() 方法 (此方法是為 那些熟悉JDBC PreparedStatement.executeUpdate() 的人們而設定的)
    Session session = sessionFactory.openSession();
            Transaction tx = session.beginTransaction();
    
            String hqlDelete = "delete Customer where name = :oldName";
            int deletedEntities = s.createQuery( hqlDelete )
                                .setString( "oldName", oldName )
                                .executeUpdate();
            tx.commit();
            session.close();
    主站蜘蛛池模板: 九月婷婷亚洲综合在线| 3344免费播放观看视频| 国产午夜鲁丝片AV无码免费| 在线观看亚洲AV日韩A∨| 欧美男同gv免费网站观看| 亚洲制服丝袜一区二区三区| xxxxx免费视频| 亚洲综合久久精品无码色欲| 免费a级毛片无码a∨蜜芽试看| 亚洲娇小性xxxx| 亚洲精品无码日韩国产不卡av| 卡一卡二卡三在线入口免费| 亚洲爆乳精品无码一区二区| 免费国产a国产片高清| 免费无码又爽又黄又刺激网站| 亚洲高清无码综合性爱视频| 国产男女爽爽爽免费视频| 亚洲中文字幕无码久久精品1 | 久久久久国色AV免费观看| 亚洲精品无码永久在线观看你懂的 | 久久精品免费视频观看| 亚洲一区二区三区高清| 91频在线观看免费大全| 亚洲AⅤ男人的天堂在线观看 | 四虎影视永久免费观看网址| 永久免费无码日韩视频| 国产亚洲无线码一区二区| 久久精品毛片免费观看| 亚洲综合一区国产精品| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 一区二区三区AV高清免费波多| 国产精品亚洲综合专区片高清久久久| 中文字幕免费在线视频| 久久亚洲精品成人AV| 国内一级一级毛片a免费| www永久免费视频| 亚洲香蕉免费有线视频| 免费观看男人免费桶女人视频| selaoban在线视频免费精品| 亚洲成AV人片久久| 激情无码亚洲一区二区三区|