<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

    主站蜘蛛池模板: 亚洲国产美女福利直播秀一区二区| 99re6在线视频精品免费| 亚洲人成网www| 亚洲AV之男人的天堂| 成年免费大片黄在线观看岛国| 两个人看的www高清免费观看| 亚洲avav天堂av在线网毛片| 亚洲最大的视频网站| 久久精品国产精品亚洲蜜月| ZZIJZZIJ亚洲日本少妇JIZJIZ| 情侣视频精品免费的国产| 国产啪精品视频网免费| 无码少妇精品一区二区免费动态| 精品国产免费人成网站| 老司机精品视频免费| 亚洲国产精品无码第一区二区三区| 亚洲精品在线网站| 亚洲免费在线视频| 亚洲国产综合91精品麻豆| 亚洲综合另类小说色区| 亚洲中文字幕无码爆乳av中文| 国产一区二区免费在线| 国产精品高清全国免费观看| 成人免费无码大片A毛片抽搐色欲| 天天影院成人免费观看| 日本xxxx色视频在线观看免费| 91福利免费网站在线观看| 美女被免费网站91色| 中文字幕的电影免费网站| 国产在线播放线91免费| 在线观看片免费人成视频无码| 免费a级毛片无码a∨免费软件| 成人黄网站片免费视频| 亚洲免费人成在线视频观看| 在线毛片片免费观看| 最近新韩国日本免费观看 | 免费人成网站在线观看10分钟| 亚洲精品视频免费在线观看| 久热中文字幕在线精品免费| 免费大片黄在线观看yw| 成年在线网站免费观看无广告|