我要插入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();
每当收到日志时我都会继续检查数据库,但是我没有看到记录被提交。我错过了什么?
答案 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();
}
}
这会按父项定义的规则间隔调用声明性方法。
另一个是手动开始和结束交易并关闭会话。