<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();
    主站蜘蛛池模板: 免费a级毛片视频| 亚洲日韩在线观看免费视频| 亚洲av午夜福利精品一区人妖| 日韩免费福利视频| 无码国产精品一区二区免费式影视 | 亚洲福利视频导航| 亚洲精品视频久久久| 日韩免费高清一级毛片在线| **真实毛片免费观看| 国产成人无码区免费网站| 国产黄在线播放免费观看| 在线观看亚洲免费| 亚洲一日韩欧美中文字幕在线| 91亚洲国产在人线播放午夜| 亚洲国产精品嫩草影院在线观看 | 亚洲avav天堂av在线网爱情| 久久久久亚洲精品影视| 亚洲精品乱码久久久久久久久久久久 | 精品少妇人妻AV免费久久洗澡| 色片在线免费观看| 久久精品国产免费观看三人同眠| 国产日韩一区二区三免费高清| 国产免费A∨在线播放| 一级免费黄色大片| 国产va免费观看| 国产精品综合专区中文字幕免费播放| 国产精品久久免费视频| 国产高清视频在线免费观看| 成人黄软件网18免费下载成人黄18免费视频 | 成在线人视频免费视频 | 亚洲AV无码一区二区乱孑伦AS| 亚洲日韩激情无码一区| 亚洲精品一品区二品区三品区| 亚洲色成人网站WWW永久| 亚洲精品自在在线观看| 亚洲AV无码专区在线播放中文| 亚洲AV无码乱码国产麻豆| 亚洲成年轻人电影网站www| 78成人精品电影在线播放日韩精品电影一区亚洲 | 亚洲天堂一区二区三区四区| 亚洲小说图片视频|