<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();
    主站蜘蛛池模板: 亚洲日本在线观看视频| 久久精品国产精品亚洲艾草网 | 亚洲高清视频在线播放| 91频在线观看免费大全| 极品色天使在线婷婷天堂亚洲| 久久精品国产亚洲Aⅴ蜜臀色欲 | 免费播放春色aⅴ视频| 男女午夜24式免费视频| 亚洲精华国产精华精华液好用| 在线亚洲精品福利网址导航| 最近免费字幕中文大全视频| 亚洲精品理论电影在线观看| 亚洲精品国偷自产在线| 扒开双腿猛进入爽爽免费视频| 好湿好大好紧好爽免费视频| 亚洲人成毛片线播放| 国产av无码专区亚洲国产精品| 97视频免费在线| aa午夜免费剧场| 亚洲一级毛片中文字幕| 成人午夜亚洲精品无码网站| 18禁成年无码免费网站无遮挡| 国产一级a毛一级a看免费人娇| 亚洲中文字幕久久精品无码A| 国产亚洲精品无码成人| 热99re久久免费视精品频软件| 国产成人精品无码免费看| 特级av毛片免费观看| 亚洲一区二区三区免费在线观看| 国产亚洲精品福利在线无卡一 | 区三区激情福利综合中文字幕在线一区亚洲视频1 | 亚洲高清中文字幕免费| 国产精品免费大片一区二区| 久久综合久久综合亚洲| 亚洲2022国产成人精品无码区| 亚洲福利精品一区二区三区| 两个人的视频高清在线观看免费| 久久久久久AV无码免费网站 | 成人电影在线免费观看| 美女被吸屁股免费网站| 亚洲日本VA中文字幕久久道具|