如题:报错为:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at org.postgresql.core.Utils.encodeUTF8(Utils.java:66)
at org.postgresql.core.v3.SimpleParameterList.getV3Length(SimpleParameterList.java:262)
at org.postgresql.core.v3.QueryExecutorImpl.sendBind(QueryExecutorImpl.java:1239)
at org.postgresql.core.v3.QueryExecutorImpl.sendOneQuery(QueryExecutorImpl.java:1506)
at org.postgresql.core.v3.QueryExecutorImpl.sendQuery(QueryExecutorImpl.java:1062)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:398)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2708)
at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
at org.hibernate.jdbc.BatchingBatcher.addToBatch(BatchingBatcher.java:34)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2247)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2660)
at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:56)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:234)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at sun.reflect.GeneratedMethodAccessor73.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.orm.hibernate3.HibernateTemplate$CloseSuppressingInvocationHandler.invoke(HibernateTemplate.java:1202)
at $Proxy1.flush(Unknown Source)
at fulong.demo.frame.service.impl.XMLInsertImpl$1.doInHibernate(XMLInsertImpl.java:257)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:372)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:338)
at fulong.demo.frame.service.impl.XMLInsertImpl.jdbcInsert(XMLInsertImpl.java:174)
at fulong.demo.frame.bean.Test.main(Test.java:35)
请高手帮忙啊!!!

解决方案 »

  1.   

    我的hibernate配置是这样的<property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
    <prop key="hibernate.show_sql">true</prop>
    <prop key="hibernate.jdbc.batch_size">50</prop><!--  
    <prop key="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</prop>-->
    <prop key="hibernate.cache.use_second_level_cash">false</prop>
    </props>
    </property>存入操作是这样的
    final List pipeLinelist = parserBean.getPipelineList();
    final List pipeList = parserBean.getPipeList();
    String deviceId = parserBean.getDeviceId();
    ht.execute(new HibernateCallback(){
    public Object doInHibernate(Session session)
    throws HibernateException, SQLException {
    int count = 0;
    Transaction ts = session.beginTransaction();
    //加管线
    for(int i=0;i<pipeLinelist.size();i++){
    Pipeline pipeline = (Pipeline)pipeLinelist.get(i);
    pipeline.setDeviceId(deviceId);
    session.save(pipeline);

    count ++ ;

    if(count%50 == 0){
    session.flush();
    session.clear();
    }
    }

       //添加管子
    for(int i=0;i<pipeList.size();i++){
    Pipe pipe = (Pipe)pipeList.get(i);
    pipe.setDeviceId(deviceId);
    session.save(pipe);
    count ++ ;
    if(count%50 == 0){
    session.flush();
    session.clear();
    }
    }
    ts.commit();
    session.close();
    return null;
    }

    });
      

  2.   

    session.save(pipeline);
    此行下加
    pipeline =new Pipeline ();
    session.save(pipe);
    此行下加
    pipe = new Pipe();
      

  3.   

    插一定数目,就把 session.clear() 调用一下。数目大的话,会把一级缓存弄爆的。
      

  4.   

    已经做了session.clear(),就两万多条数据,不多。前几天还用过这段程序插入呢,今天在用就出错了。不知道为什么啊
      

  5.   

    我对hibernate不是很了解,希望能帮忙解释清楚点,谢了