知识大全 Hibernate大数据量操作方案

Posted 操作

篇首语:志行万里者,不中道而辍足。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Hibernate大数据量操作方案相关的知识,希望对你有一定的参考价值。

Hibernate大数据量操作方案  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  阅读了Hibernate的Reference之后 可以采用批量处理的方法 当插入的数据超过 时 就flush session并且clear

  下面是一个测试method

     /** */ /**

      * 测试成批插入数据的事务处理 返回是否成功

      *

      * @param objPO Object

      * @return boolean

       */

       public  boolean insertBatch( final Object objPO) 

        boolean isSuccess =  false ;

        Transaction transaction =  null ;

        Session session = openSession();

         try  

          transaction = session beginTransaction();

           for ( int i =  ; i <  ; i ++ ) 

            session save(objPO);

             if (i %    ==  ) 

              // flush a batch of inserts and release memory

              session flush();

              session clear();

           

         

          mit();

          ( transaction wasCommitted:

              + transaction wasCommitted());

          isSuccess =  true ;

          catch (HibernateException ex) 

           if (transaction !=  null ) 

             try  

              transaction rollback();

              logger error( transaction wasRolledBack:

                  + transaction wasRolledBack());

              catch (HibernateException ex ) 

              logger error(ex getMessage());

              ex printStackTrace();

           

         

          logger error( Insert Batch PO Error:   + ex getMessage());

          ex printStackTrace();

          finally  

           if (transaction !=  null ) 

            transaction =  null ;

         

          session close();

       

        return isSuccess;

     

  

  这只是简单的测试 实际项目中遇到的问题 要比这个复杂得多

  这时候 我们可以让Spring来控制Transaction 自己来控制Hibernate的Session 随时更新数据

  首先 利用HibernateDaoSupport类来自定义个方法打开Session

   public Session openSession()

  

       return getHibernateTemplate() getSessionFactory() openSession();

  

     然后 用打开的Session处理你的数据

   protected void doBusiness(Session session)

  

       while (true)

         //do your business with the opening session

         someMethod(session);

         session flush();

         session clear();

         ( good job! );

       

  

  每做一次数据操作 就更新一次Session 这样可以保证每次数据操作都成功 否则就让Spring去控制 它roll back吧

  最后 记得关闭Session

    Session session = openSession();

   doBusiness(session);

   session close(); // 关闭session

  至于处理速度呢 不会慢到哪儿去的 已经试验过了 ; )

cha138/Article/program/Java/ky/201311/28270

相关参考