hibernate批量操作
有以下四种方式来进行批量操作
- 通过session
- 通过HQL
- 通过statelessSession
- 通过JDBCAPI 使用该方式效率最高,速度最快
<!-- more -->
通过session
通过session批量操作时:session的save()及update()方法会把处理的对象存放在自己的缓存中,如果使用session来处理大量持久化对象,需要及时从缓存中清空已经处理完毕且不会再访问的对象(处理完一批对象后,立即调用flush()方法刷新缓存,然后调用clear()方法清空缓存)
注意:
- 在hibernate配置文件中设置JDBC单次批量的数目,应保证每次想数据库发送的批量SQL语句数目与batch_size属性一致
- 如果主键由数据库自增生成的话,无法使用批量操作
通过HQL
不能进行批量插入,更新只能操作一条sql语句(比如说将某个值批量改为某个数)
通过StatelessSession
- StatelessSession没有缓存,使用该类来加载、保存、更新后的对象处于游离状态
- 调用save()、update()、delete()方法时会立即执行SQL语句
- StatelessSession不会对所加载的对象自动进行脏检查。需要进行显示的save()/update()
- StatelessSession不会对关联的对象进行任何级联操作
- 通过同一个StatelessSession加载相同OID的对象,会得到两个具有不同内存地址的对象
- StatelessSession可以被Interceptor拦截器拦截到,但是会被hibernate事件处理系统忽略
通过JDBCAPI
session.doWork(new Work() {
@Override
public void execute(Connection connection) throws SQLException {
}
});
https://zhhll.icu/2020/框架/hibernate/基础/11.hibernate批量操作/
本文由mdnice多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。