在javaEey坛子上有人提到“robbin提到Hibernate3的缺点,一级缓存的强引用的问题,所以在做批量查询和插入操作的时候需要执行session.flush和session.clear两个操作。”
如批量插入时可以这么做:
先在循环里面调用session.save()来保存,然后当到达指定的批处理数目的时候(比如20个),执行 session.flush()和session.clear()来将数据写入数据库并清空Hibernate缓存。
public List<SomeObject> saveFiberCodes(final List<SomeObject> codes) {
return (List<SomeObject>) this.getHibernateTemplate().execute(new HibernateCallback() {
@Override
public Object doInHibernate(Session session) throws HibernateException, SQLException {
for (int i = 0; i < codes.size(); i++) {
session.save(codes.get(i));
if (i % 20 == 0) {
session.flush();
session.clear();
}
}
return codes;
}
});
}