<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();
    主站蜘蛛池模板: 国产成人1024精品免费| 色五月五月丁香亚洲综合网| 久久精品成人免费观看97| 亚洲成av人在片观看| 精品无码专区亚洲| 国产精品免费看香蕉| 国产成人 亚洲欧洲| 亚洲国产一成久久精品国产成人综合| 国产亚洲综合精品一区二区三区| 免费观看的av毛片的网站| 亚洲精品人成网线在线播放va| 国产精品色午夜视频免费看| 亚洲第一成年免费网站| 免费va在线观看| A国产一区二区免费入口| 亚洲国产第一站精品蜜芽| 曰批全过程免费视频网址| 亚洲人成高清在线播放| 美女被免费视频网站a国产| 特a级免费高清黄色片| 亚洲老妈激情一区二区三区| 久久久久久久久久国产精品免费 | 国产精品高清视亚洲精品| 成人免费网站在线观看| 免费亚洲视频在线观看| 亚洲精品无码AV人在线播放| 最近中文字幕免费完整| 亚洲精品天堂成人片AV在线播放| 亚洲日本在线观看视频| 99re6在线视频精品免费下载| 亚洲一级特黄特黄的大片 | 亚洲精品综合久久| 久久国产精品免费视频| 亚洲AV男人的天堂在线观看| 亚洲一级黄色视频| 久久福利资源网站免费看| 美女视频黄频a免费大全视频| 亚洲AV天天做在线观看| 午夜老司机免费视频| 免费在线观看一级片| 亚洲AV无码一区二区三区电影 |