List
for(int i=0;i
Object o = getHibernateTemplate().get(Student.class, st.getStudentId());
if(null == o){
...
Address addr = new Address();
...
getHibernateTemplate().saveOrUpdate(addr);
getHibernateTemplate().saveOrUpdate(o);
getSession().flush();
getSession().evict(addr);
getSession().evict(o);
} else {
...
Address addr = methodForFindAddr(o);
...
getHibernateTemplate().saveOrUpdate(hql);
getHibernateTemplate().saveOrUpdate(o);
getSession().flush();
getSession().evict(addr);
getSession().evict(o);
}
}
现在实现如上面代码所示,如果list数据量比较小的话,还可勉强凑合,若超过数万条数据,需耗费大量时间,有什么好的建议对此进行优化?
我曾试两种方法:1.过线程池的方式,可方法methodForFindAddr可能会出现同步问题,线程之间数据串了。
2.将所有saveOrUpdate的对象抽取出来,循环批量保存,每循环50次,flush一次。可是两个循环耗费的时间仍然很长。