Lau*_*t K 8 spring hibernate bulkinsert
我在我的应用程序中使用混合Spring/Hibernate(没有原创).对于给定的功能,我必须将CSV文件的内容导入到Oracle DB的表中.就目前而言,我这样做是为了创造对象
HibernateTemplate.saveOrUpdate
Run Code Online (Sandbox Code Playgroud)
在他们每个人(我需要检索他们新分配的Id)
然后使用Spring事务API在方法结束时进行事务.
一切都很好,除了性能,这对于5000个物体是正确的,但不是10万个......
所以我寻找加速这些东西的想法.我听说过Hibernate的批量插入,但找不到任何可靠的引用.任何人都可以给我一些想法,以更高的性能执行此导入吗?
你可能尝试的简单方法是刷新并清除会话说每100个对象......
所以执行
session.flush();
session.clear();
Run Code Online (Sandbox Code Playgroud)
每100或1000个插入.
这将刷新并清除hibernate会话并阻止它变得太大(可能为什么你的10万个对象需要这么长时间).
此外,如果你使用身份标识符生成器,hibernate会默默地关闭批量插入.批量插入将提高性能.您还需要在时间编号上指定等效于100的hibernate.jdbc.batch_size配置属性.
Manning的Java Persistence with Hibernate是这个的源头(伟大的书 - 多次拯救我的皮肤).
您还可以考虑使用StatelessSession,因为它是为批量操作而设计的.
StatelessSession ss=sessionFactory().openStatelessSession();
Transaction tx=ss.beginTransaction();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9106 次 |
最近记录: |