13.1. 批量插入(Batch inserts)如果要将很多对象持久化,你必须通过经常的调用 flush() 以及稍后调用 clear() 来控制第一级缓存的大小。 
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
   
for ( int i=0; i<100000; i++ ) {
    Customer customer = new Customer(.....);
    session.save(customer);
    if ( i % 20 == 0 ) { //20, same as the JDBC batch size //20,与JDBC批量设置相同
        //flush a batch of inserts and release memory:
        //将本批插入的对象立即写入数据库并释放内存
        session.flush();
        session.clear();
    }
}
   
tx.commit();
session.close();

解决方案 »

  1.   

    关键是我用的spring+hibernate,
    Session session = sessionFactory.openSession();
    Transaction tx = session.beginTransaction();
     tx.commit();
    session.close();这些操作我都不需要做的
      

  2.   

    唉,帮忙帮到底,送佛送到西public Integer saveList(final  List<Customer> clist){
           return (Integer)super.getHibernateTemplate().execute(new HibernateCallback(){
              public Object doInHibernate(Session session){
          int rows = 0;
    ////////////////////////////
                    for(Customer c: clist)
                    {
                        session.save(customer);
                        rows++;
                        if ( rows  % 20 == 0 ) { //20, same as the JDBC batch size //20,与JDBC批量设置相同
                            //flush a batch of inserts and release memory:
                          //将本批插入的对象立即写入数据库并释放内存
                         session.flush();
                          session.clear();
                        } // end of if
                    }//end of for
    ///////////////////////////
          return new Integer(rows);
    }
           });
    }
      

  3.   

    谢谢你laoxing521(想做程序员的农民)
    我程序改后如下:分布在14个文件系统里,有25万条数据,全部导到数据库里需要5分钟,是快还是慢? public void saveList(final  List<T> list){
    //       return (Integer)
           super.getHibernateTemplate().execute(new HibernateCallback(){
              public Object doInHibernate(Session session){
          int rows = 0;                 for(T t: list)
                    {
                        session.save(t);
                        rows++;
                        if ( rows  % 10000 == 0 ) { //20, same as the JDBC batch size //20,与JDBC批量设置相同
                            //flush a batch of inserts and release memory:
                          //将本批插入的对象立即写入数据库并释放内存
                         session.flush();
                         session.clear();
                        } 
                    }          return new Integer(rows);
    }
           });
    }