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

Hibernate向数据库中批量插入数据

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;

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