<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 閱讀(747) 評論(0)  編輯  收藏 所屬分類: Hibernate

    主站蜘蛛池模板: a在线视频免费观看| 亚洲成av人片在www鸭子| 中文在线免费不卡视频| 男人的天堂亚洲一区二区三区 | 亚洲免费在线观看| 亚洲精品高清在线| jizz中国免费| 国产亚洲3p无码一区二区| 永久免费av无码网站yy| 亚洲国产精品婷婷久久| 精品福利一区二区三区免费视频| 91在线精品亚洲一区二区| 18禁黄网站禁片免费观看不卡| 亚洲福利一区二区精品秒拍| 免费在线观看h片| 亚洲午夜理论片在线观看| 国产午夜鲁丝片AV无码免费| 污网站在线观看免费| 在线观看午夜亚洲一区| 三年片在线观看免费大全电影 | 人与禽交免费网站视频| ww亚洲ww在线观看国产| 国产一级一片免费播放| 一个人免费播放在线视频看片| 亚洲国产另类久久久精品小说 | 在线观看人成视频免费无遮挡| 亚洲电影一区二区三区| 成年美女黄网站18禁免费| 美女扒开尿口给男人爽免费视频| 亚洲熟妇av一区二区三区漫画| 59pao成国产成视频永久免费| 亚洲色无码国产精品网站可下载| 亚洲中文字幕丝袜制服一区| 午夜免费啪视频在线观看| 色老板亚洲视频免在线观| 亚洲欧洲一区二区三区| 最近中文字幕mv免费高清在线| 亚洲国产成人久久精品大牛影视 | 成人免费福利电影| 两性色午夜视频免费播放| 亚洲国产人成在线观看|