hibernate批量处理
- 当批量插入数据时,可能会造成内存溢出,可以每插入20条数据,同步一下数据库,清除缓存
方法一:
定期清除缓存
代码如下:
for (int i = 0; i < 1000000; i++) {
s.save(user);
if (i % 20 == 0) {
session.flush();//同步数据库
session.clear();//清除缓存
}
}
方法二:
可以采用StatelessSession,此session不与一级和二级缓存交互;
- 对于批量更新:
hibernate3.0之前:
Query q = session.createQuery("from user");
List<User> list = q.list();
for (User u : list) {
u.setName("name*");//此处u是持久态,所以无需s.save方法,自动关联session更新到数据库;
}
hibernate3.0之后:<疑问>
Query q = session.createQuery("update u set birthday=:bd from User as u");
session.excuteUpdate();
可以进行批量更新;