使用弹簧数据批量插入

时间:2016-03-04 06:08:04

标签: java spring spring-data commit

我要插入60K记录。我希望按批次100提交记录。

以下是我的代码

for(int i = 0 ;i < 60000; i++) {
   entityRepo.save(entity);
   if(i % 100 == 0) {
      entityManager.flush();
      entityManager.clear();
      LOG.info("Committed = " + i);
   } 
}
entityManager.flush();
entityManager.clear();

每当收到日志时我都会继续检查数据库,但是我没有看到记录被提交。我错过了什么?

2 个答案:

答案 0 :(得分:2)

仅拨打mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { mSwipeRefreshLayout.setRefreshing(false); mSwipeRefreshLayout.setEnabled(false); } }); flush()是不够的。您需要引用clear()并致电Transaction(来自reference guide

.commit()

答案 1 :(得分:1)

我假设有两种方法可以做到这一点,一种是定义事务声明,另一种是从外部方法调用。

父:

RunAndRenderTask

子:

 List<Domain> domainList = new ArrayList<>();
 for(int i = 0 ;i < 60000; i++) {
    domainList.add(domain);
    if(i%100 == 0){
    child.saveAll(domainList);
    domainList.clear();
    }
 }

这会按父项定义的规则间隔调用声明性方法。

另一个是手动开始和结束交易并关闭会话。