<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

    主站蜘蛛池模板: 亚洲成年人免费网站| 最近免费2019中文字幕大全| 国产一区在线观看免费| 午夜在线a亚洲v天堂网2019| 免费国产成人高清在线观看网站| 亚洲国产综合人成综合网站00| 1000部啪啪毛片免费看| 亚洲18在线天美| 在线观看成人免费| 激情婷婷成人亚洲综合| 亚洲免费日韩无码系列 | 亚洲男同gay片| 国产精品免费一级在线观看| 四虎国产精品永免费| 亚洲狠狠婷婷综合久久久久 | 一级毛片a女人刺激视频免费| 国产亚洲精品成人AA片新蒲金| 精品一区二区三区免费 | 亚洲日韩精品无码专区| 免费无码看av的网站| 视频免费1区二区三区| 亚洲综合在线另类色区奇米| 91香焦国产线观看看免费| 亚洲不卡中文字幕| 国产免费观看黄AV片| 一个人免费播放在线视频看片 | 91亚洲导航深夜福利| 毛片基地免费视频a| www免费黄色网| 亚洲理论片在线观看| 国产一级一片免费播放i| 国产精品免费看久久久| 亚洲色精品VR一区区三区| 亚洲国产成人久久综合一区77| 久久精品免费观看国产| 亚洲国产欧美一区二区三区| 亚洲精品无码久久久久sm| 97视频热人人精品免费| 一级毛片大全免费播放下载| 亚洲国产成人久久| 国产亚洲精品激情都市|