Java 使用spring数据进行批插入
我有60K条记录要插入。我想按100个批次提交记录 下面是我的代码Java 使用spring数据进行批插入,java,spring,spring-data,commit,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(); entit
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();
for(int i=0;i<60000;i++){
entityRepo.save(实体);
如果(i%100==0){
entityManager.flush();
entityManager.clear();
LOG.info(“Committed=“+i”);
}
}
entityManager.flush();
entityManager.clear();
每当我收到日志时,我都会检查数据库,但我没有看到记录被提交。。我缺少什么?调用
flush()
和clear()
是不够的。您需要对事务的引用
并调用.commit()
(从)
Session Session=sessionFactory.openSession();
事务tx=会话.beginTransaction();
对于(inti=0;i我假设有两种方法可以实现这一点,一种是定义事务声明性,另一种是从外部方法调用
家长:
List<Domain> domainList = new ArrayList<>();
for(int i = 0 ;i < 60000; i++) {
domainList.add(domain);
if(i%100 == 0){
child.saveAll(domainList);
domainList.clear();
}
}
List domainList=new ArrayList();
对于(int i=0;i<60000;i++){
domainList.add(域);
如果(i%100==0){
saveAll(域列表);
domainList.clear();
}
}
儿童:
@Transactional
public void saveAll(List<Domain> domainList) {
}
@Transactional
public void saveAll(列表域列表){
}
这将按父级定义的固定时间间隔调用声明性方法
另一个是手动开始和结束事务并关闭会话。No.为Spring注入TransactionManager
@Transactional
public void saveAll(List<Domain> domainList) {
}