<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    love fish大鵬一曰同風起,扶搖直上九萬里

    常用鏈接

    統計

    積分與排名

    friends

    link

    最新評論

    Hibernate大數據量操作解決方案(轉)

    閱讀了Hibernate的Reference之后,可以采用批量處理的方法,當插入的數據超過10000時,就flush session并且clear。
    下面是一個測試method。
    ?1/**?*//**
    ?2?????*?測試成批插入數據的事務處理,返回是否成功
    ?3?????*?
    ?4?????*?@param?objPO?Object
    ?5?????*?@return?boolean
    ?6?????*/

    ?7????
    public?boolean?insertBatch(final?Object?objPO)?{
    ?8????????boolean?isSuccess?=?false;
    ?9????????Transaction?transaction?=?null;
    10????????Session?session?=?openSession();
    11????????try?{
    12????????????transaction?=?session.beginTransaction();
    13????????????for?(int?i?=?0;?i?<?100000;?i++)?{
    14????????????????session.save(objPO);
    15????????????????if?(i?%?50?==?0)?{
    16????????????????????//?flush?a?batch?of?inserts?and?release?memory
    17
    ????????????????????session.flush();
    18????????????????????session.clear();
    19????????????????}

    20
    ????????????}

    21????????????transaction.commit();
    22????????????logger.info("transaction.wasCommitted:"
    23
    ????????????????????+?transaction.wasCommitted());
    24????????????isSuccess?=?true;
    25????????}?catch
    ?(HibernateException?ex)?{
    26????????????if?(transaction?!=?null)?{
    27????????????????try?{
    28????????????????????transaction.rollback();
    29????????????????????logger.error("transaction.wasRolledBack:"
    30
    ????????????????????????????+?transaction.wasRolledBack());
    31????????????????}?catch
    ?(HibernateException?ex1)?{
    32????????????????????logger.error(ex1.getMessage());
    33????????????????????ex1.printStackTrace();
    34????????????????}

    35
    ????????????}

    36????????????logger.error(
    "Insert?Batch?PO?Error:"?+?ex.getMessage());
    37????????????ex.printStackTrace();
    38????????}?finally
    ?{
    39????????????if?(transaction?!=?null)?{
    40????????????????transaction?=?null;
    41????????????}

    42????????????session.close();
    43????????}

    44
    ????????return?isSuccess;
    45????}

    46

    這只是簡單的測試,實際項目中遇到的問題,要比這個復雜得多。
    這時候,我們可以讓Spring來控制Transaction,自己來控制Hibernate的Session,隨時更新數據。

    首先,利用HibernateDaoSupport類來自定義個方法打開Session;
    1 public ?Session?openSession(){
    2????????
    3????????return?getHibernateTemplate().getSessionFactory().openSession();
    4????????
    5????}
    然后,用打開的Session處理你的數據;
    ?1protected?void?doBusiness(Session?session)?{
    ?2
    ?3????????while?(true)?{
    ?4????????????//do?your?business?with?the?opening?session????????
    ?5
    ????????????someMethod(session);
    ?6????????????session.flush();
    ?7????????????session.clear();
    ?8????????????logger.info("good?job!");????????????
    ?9????????}???????
    10
    }

    每做一次數據操作,就更新一次Session,這樣可以保證每次數據操作都成功,否則就讓Spring去控制它roll back吧。

    最后,記得關閉Session。

    1 Session?session? = ?openSession();
    2 doBusiness(session);
    3 session.close();? // 關閉session


    至于處理速度呢,不會慢到哪兒去的,已經試驗過了。; - )

    還等什么,趕快試試吧!

    posted on 2007-01-12 15:30 liaojiyong 閱讀(738) 評論(0)  編輯  收藏 所屬分類: Hibernate

    主站蜘蛛池模板: 国产精品国产亚洲区艳妇糸列短篇| 亚洲一区二区三区免费视频| 美女扒开尿口给男人爽免费视频| 免费高清小黄站在线观看| 亚洲综合在线一区二区三区| 成人毛片视频免费网站观看| 亚洲综合精品第一页| 国产精品酒店视频免费看| 一级特级aaaa毛片免费观看 | 成人A毛片免费观看网站| 亚洲欧洲美洲无码精品VA| 鲁丝片一区二区三区免费| 亚洲天堂在线播放| 毛片免费在线视频| 国产精品亚洲一区二区三区 | 在线成人爽a毛片免费软件| 亚洲手机中文字幕| 男女交性永久免费视频播放| 色多多www视频在线观看免费| 中文亚洲AV片在线观看不卡| a级片免费观看视频| 久久精品国产亚洲AV无码麻豆| 永久免费AV无码国产网站| 国产亚洲综合久久| 亚洲国产婷婷六月丁香| 91网站免费观看| 麻豆va在线精品免费播放| 亚洲av综合色区| 永久免费bbbbbb视频| 国产黄在线观看免费观看不卡| 亚洲综合自拍成人| 免费国产人做人视频在线观看| 182tv免费视频在线观看| 国产成人精品日本亚洲11| 亚洲综合区小说区激情区| 91高清免费国产自产| 乱爱性全过程免费视频| 亚洲伊人久久大香线蕉| 亚洲午夜福利717| 日韩精品免费电影| 99精品视频在线观看免费播放|