<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

    主站蜘蛛池模板: 亚洲国产精品久久久久| 亚洲AV无码乱码在线观看| 亚洲国产精品国自产拍电影| a级在线免费观看| 美腿丝袜亚洲综合| 好男人资源在线WWW免费| 久久久久亚洲AV无码专区桃色| 免费很黄无遮挡的视频毛片| 亚洲精品第一国产综合境外资源| 国产综合激情在线亚洲第一页| 国产高清在线精品免费软件| 国产成人亚洲精品播放器下载| 免费一级毛片在线观看| 一级毛片免费一级直接观看| 日韩精品亚洲aⅴ在线影院| 搡女人免费免费视频观看| 亚洲av无码专区在线播放| 91精品国产免费久久国语蜜臀 | 亚洲人成影院在线无码按摩店| 香蕉免费在线视频| 少妇中文字幕乱码亚洲影视 | 国产亚洲美女精品久久| 免费在线观看一级毛片| 国产午夜精品久久久久免费视 | 一级毛片a女人刺激视频免费| 亚洲国产美女精品久久久久∴ | 日韩a在线观看免费观看| 羞羞视频免费网站日本| 亚洲国产精品一区二区成人片国内| 午夜免费福利视频| 亚洲国产日韩视频观看| 亚洲精品无码久久毛片| 91精品导航在线网址免费| 亚洲爆乳大丰满无码专区| 国产成人精品日本亚洲| 动漫黄网站免费永久在线观看| 免费观看四虎精品成人| 亚洲香蕉免费有线视频| 四虎永久免费影院在线| 777爽死你无码免费看一二区| 国产 亚洲 中文在线 字幕|