DEPTCODE | empname | jobtype |部门| DOJ
121 |约翰|永久|帐户| 2012年12月12日
122 |保罗|永久|收入| 11/12/2011
123 |标志|承包商|销售| 04/05/2010
121 |麦克|永久|帐户| 08/09/2009
123 |纳什|承包商|销售| 2016年12月15日
124 | Doe的|承包商|营销| 2013年12月4日
问题描述:
这是我尝试使用MultiFileupload上传的CSV文件。
阅读并创建一个列表。
此列表针对EMP_TRANS_TABLE进行了重复验证 记录。
DEPT_CODE + JOB_TYPE + DOJ成为我的复合主键。
我正在使用SPRING JPA Predicatesto检查重复值和 然后插入值。
这个工作正常,直到750个记录超过它需要更多 超过4分钟来保存数据并获得超时以发回响应 到前端。
技术堆栈:
1)前端 - Angular JS
2)Spring Rest Services和Spring JPA(休眠)
3)Linux上的WAS 8.5 App服务器和SQL Server 2008
4)Java 1.7
问题
答案 0 :(得分:0)
你可以将hibernate属性定义为hibernate' s SessionFactory
的一个属性:
<property name="jdbc.batch_size">500</property>
使用此批处理设置,您应该输出如下:
insert into Table(id , name) values (1, 'na1') , (2, 'na2') ,(3, 'na3')..
而不是
insert into Table(id , name) values (1, 'na1');
insert into Table(id , name) values (2, 'na2');
insert into Table(id , name) values (3, 'na3');
在交易方法中,您将持续存在大约500个实体..然后刷新您的交易以获得最佳性能,直到所有数据都已保存:
Transaction tx = session.beginTransaction();
for ( int i=0; i<5000; i++ ) {
EmpTrans empTrans = new EmpTrans();
// populate empTrans attributes
session.save(empTrans);
if ( i % 500 == 0 ) { //500 , same as the JDBC batch size
//flush a batch of inserts and release memory:
session.flush();
session.clear();
}
}
tx.commit();