<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 閱讀(1464) 評論(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();
    主站蜘蛛池模板: 亚洲gv猛男gv无码男同短文| 久久综合亚洲色HEZYO社区| 亚洲色偷偷狠狠综合网| 亚洲国产精品lv| baoyu116.永久免费视频| 亚洲熟女一区二区三区| 99免费在线视频| 亚洲福利在线观看| 全部免费毛片在线播放| 亚洲熟妇av一区| 全黄大全大色全免费大片| 亚洲精品无码成人片久久| a级在线免费观看| 亚洲网站在线观看| 欧洲乱码伦视频免费| 久久亚洲私人国产精品| 1000部拍拍拍18勿入免费凤凰福利 | 一个人看的在线免费视频| 无码国产精品一区二区免费式直播 | 亚洲精品狼友在线播放| 无码AV片在线观看免费| 久久久亚洲精品蜜桃臀| 永久在线观看免费视频| 红杏亚洲影院一区二区三区| a级午夜毛片免费一区二区| 一区二区三区亚洲| 在线免费观看一级片| 一本一道dvd在线观看免费视频| 亚洲伊人久久大香线蕉综合图片| 2022久久国产精品免费热麻豆| 国产亚洲综合成人91精品| 啦啦啦完整版免费视频在线观看| 亚洲AV无码国产一区二区三区| 国产精品成人免费视频网站京东 | 亚洲国产精品成人午夜在线观看| 免费一级毛片清高播放| 国产精品99精品久久免费| 亚洲不卡中文字幕无码| 国产免费av片在线看| 成人无码精品1区2区3区免费看| 777亚洲精品乱码久久久久久|