在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;
}
});
}