日期:2014-05-16  浏览次数:20519 次

向数据库中批量插入数据

Hibernate的方法:
? 如果采用如下方法(注意这中方法不行);

???????? Session session=SessionFactory.openSession();
???????? Transaction tx=session.beginTransaction();
???????? for(int i=0;i<100000;i++){
????????????? User u= new User(......);
????????????? session.save(u);
????????? }
????????? tx.commit();
????????? session.close;

随着程序进行会出现内存溢出的错误 OutOfMemoryException? 这是用为hibernate的session持有一个一级缓存,所有的User对象将都在session级别进行了缓存;

?

解决:

?

Session session=HibernateUtil.currentSession();
Transaction tx=session.beginTransaction();
for(int i=0;i<100000;i++){
??User u= new User();
??u.setName("*******"+i);
??u.setAge(i);
??session.save(u);
??if(i%20 == 0){
???session.flush();
???session.clear();
??}
??tx.commit();
??sHibernateUtil.closeSession();
}

在上程序中,手动将Session处的缓存数据写入数据库;并且清空session;

除了要对Session级别的缓存进行处理外;还应该通过配置来关闭SessionFactory的二级缓存:
hibernate.cache.use.second_level_cache?? false;

二级缓存也有可能引发异常;