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

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

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

    posts - 40,  comments - 187,  trackbacks - 0
    閱讀了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;
    1public?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


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

    還等什么,趕快試試吧!

    ?
    ?????????????????????????????????????????????????????????????????????????????? THE END

    posted on 2007-01-11 17:12 小立飛刀 閱讀(4884) 評論(3)  編輯  收藏 所屬分類: Hibernate

    FeedBack:
    # re: Hibernate大數據量操作解決方案
    2007-01-13 22:54 | 小車馬
    請問樓主,你們在項目中也是這么做的嗎  回復  更多評論
      
    # re: Hibernate大數據量操作解決方案
    2007-01-15 10:46 | 小雪飛刀
    不錯,我在項目中就是按照這個思路做的  回復  更多評論
      
    # re: Hibernate大數據量操作解決方案
    2010-12-04 10:25 | 瀟湘振宇
    這個解決方案還是有問題的,我測試過通過這種方式插入20萬的數據量,還勉強能夠接受,完成此操作我的PC耗時1分多鐘,服務層的處理很快,慢還是慢在Spring的事務提交。
    如果插入25萬及以上的數據量時,就會出現內存溢出了!  回復  更多評論
      
    <2007年1月>
    31123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    生存或毀滅,這是個必答之問題:是否應默默的忍受坎苛命運之無情打擊,還是應與深如大海之無涯苦難奮然為敵,并將其克服。此二抉擇,究竟是哪個較崇高?

    常用鏈接

    留言簿(12)

    隨筆分類(43)

    相冊

    收藏夾(7)

    朋友的博客

    電子資料

    搜索

    •  

    積分與排名

    • 積分 - 302597
    • 排名 - 192

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日韩亚洲不卡在线视频中文字幕在线观看| 亚洲av永久无码精品网站| 亚洲人成77777在线播放网站不卡 亚洲人成77777在线观看网 | 亚洲人成在线播放网站| yellow免费网站| 亚洲中文字幕无码专区| 国产高潮久久免费观看| 国产亚洲情侣一区二区无码AV| 在线播放免费人成视频网站| 亚洲精品无码你懂的网站| jizz18免费视频| 久久亚洲免费视频| 亚洲一区免费在线观看| 亚洲人成在线中文字幕| 噜噜嘿在线视频免费观看| 狠狠入ady亚洲精品| 中文字幕亚洲一区| 国产精品免费无遮挡无码永久视频| 亚洲AV日韩AV天堂久久| 日本免费网址大全在线观看| 亚洲JLZZJLZZ少妇| 亚洲精品美女久久久久99小说| 国产性生大片免费观看性| 久久久久亚洲av无码专区喷水| 青青草a免费线观a| 免费观看四虎精品成人| 亚洲日产韩国一二三四区| 波多野结衣中文字幕免费视频| 亚洲av无码一区二区三区天堂| 亚洲国产成人久久精品99| 一个人免费视频观看在线www| 91亚洲国产成人久久精品网站| 免费无码又爽又刺激聊天APP| 国产成人综合亚洲| 亚洲av无码成h人动漫无遮挡 | 2022国内精品免费福利视频| 蜜芽亚洲av无码精品色午夜| 超pen个人视频国产免费观看| 日本一区二区三区免费高清在线| 久久久久久a亚洲欧洲aⅴ| 成人免费网站在线观看|