· 批量处理数据是指在一个事务中处理大量数据.
· 在应用层进行批量操作, 主要有以下方式:
- 通过 Session
- 通过 HQL
- 通过 StatelessSession
- 通过 JDBC API( 效率最高, 速度最快)
(一)通过 Session 来进行批量操作
· Session 的 save() 及 update() 方法都会把处理的对象存放在自己的缓存中. 如果通过一个 Session 对象来处理大量持久化对象, 应该及时从缓存中清空已经处理完毕并且不会再访问的对象. 具体的做法是在处理完一个对象或小批量对象后, 立即调用 flush() 方法刷新缓存, 然后在调用 clear() 方法清空缓存
· 通过 Session 来进行处理操作会受到以下约束
需要在 Hibernate 配置文件中设置 JDBC 单次批量处理的数目, 应保证每次向数据库发送的批量的 SQL 语句数目与batch_size 属性一致
若对象采用 “identity” 标识符生成器, 则 Hibernate 无法在 JDBC 层进行批量插入操作 进行批量操作时, 建议关闭Hibernate 的二级缓存
例
批量更新: 在进行批量更新时, 如果一下子把所有对象都加载到 Session 缓存, 然后再缓存中一一更新, 显然是不可取的
- 使用可滚动的结果集 org.hibernate.ScrollableResul