对于hibernate 来说,一级缓存由session提供并且只会存在内存当中。因此当对数据进行大批量操作时,操作不当可能会出现OutOfMemoryError(内存溢出)异常,因此在对数据进行大批量操作时应注意以下几点:
1)不要频繁使用 session 的 flush,每进行一次flush ,hibernate 会将PO数据与数据库同步,对于海量数据操作来说,这简直是性能灾难。
2)及时清除不需要的一级缓存数据,在进行大量的数据操作时,可以对数据进行分批操作,且每一次操作后清除内存。
3)使用HQL的批量删除语句
String hql = “delete A where id in (:id)”;
Query query = session.createQuery(hql);
query.setParameterList(“id”, s).executeUpdate();