<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();
    主站蜘蛛池模板: 国产精品亚洲精品日韩动图| 亚洲男人天堂影院| 污网站免费在线观看| 午夜毛片不卡高清免费| 亚洲日韩一区二区一无码| 成人免费网站在线观看| 亚洲成a∧人片在线观看无码| 午夜一区二区免费视频| 亚洲а∨精品天堂在线| 亚洲高清最新av网站| 久久性生大片免费观看性| 国产亚洲婷婷香蕉久久精品| 免费毛片a线观看| 激情亚洲一区国产精品| 免费黄色毛片视频| 美女黄频视频大全免费的| 亚洲人成网站在线观看青青| a级片免费观看视频| 亚洲黄色在线网站| 成年人性生活免费视频| 亚洲AV成人片无码网站| 伊人婷婷综合缴情亚洲五月| 免费国产黄网站在线观看可以下载| 亚洲午夜精品一区二区| 啦啦啦www免费视频| 一级特黄aaa大片免费看| 亚洲欧洲第一a在线观看| 99久久免费精品国产72精品九九 | 亚洲AV无码国产丝袜在线观看| 三年片在线观看免费观看大全一 | 妞干网免费视频观看| sss在线观看免费高清| 亚洲最大成人网色| 国产美女a做受大片免费| 最近免费中文字幕中文高清| 亚洲国产成人久久77| 又大又黄又粗又爽的免费视频| 华人在线精品免费观看| 亚洲欧美第一成人网站7777| 中文字幕亚洲一区| 天堂亚洲国产中文在线|