如何缩短为spring-data-jpa插入记录所花费的时间

时间:2017-01-03 05:32:19

标签: java spring-boot spring-data-jpa

我在 spring-data-jpa 项目中使用 spring-boot 插入 Oracle中的一些300000记录D B。

以下是我的表格详情

"LOG_ID" NUMBER NOT NULL ENABLE, 
"STAFFNO" VARCHAR2(6 BYTE), 
"RP_NUM" NUMBER, 
"BID_GRP" NUMBER, 
"BID_GRP_RANK" NUMBER, 
"VALID_RP" VARCHAR2(1 BYTE), 
"STAFF_RP_WEIGHT" NUMBER, 
"SEASONALITY" VARCHAR2(1 BYTE), 
"NET_WEIGHT" NUMBER, 
"IS_ASSIGNED" VARCHAR2(1 BYTE), 
"DEPT_ID" NUMBER, 
"SCENARIO_ID" NUMBER, 
"SEASONALITY_PANELTY" NUMBER, 
"RANK" VARCHAR2(20 BYTE), 
"REASON_FOR_INVALID" VARCHAR2(2000 BYTE)

我正在使用save(entity)中的JpaRepository方法来保存记录。 保存记录需要 90 分钟。

这就是我生成id的方式

@Id
@GenericGenerator(name = "sequence_id", strategy = "org.hibernate.id.IncrementGenerator")
@GeneratedValue(generator = "sequence_id")
@Column(name = "LOG_ID", insertable = true, unique = true, nullable = false)
private Long logId;

请建议如何缩短保存记录的时间。

更新

以下是我用来保存实体的代码:

 reportStaffRpDetailsDao.saveOrUpdate(list);

DAO

import java.util.List;
import com.x.ReportStaffRpDetails;

public interface ReportStaffRpDetailsDao {
     void saveOrUpdate(List<ReportStaffRpDetails> entities);
}

DAO Impl

import java.util.List;
import java.util.stream.Collectors;

import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.x.ReportStaffRpDetailsDao;
import com.x.ReportStaffRpDetails;
import com.x.ReportStaffRpDetailsModel;
import com.x.ReportStaffRpDetailsRepository;

@Service
public class ReportStaffRpDetailsDaoImpl implements ReportStaffRpDetailsDao     {

    @Autowired
    private ReportStaffRpDetailsRepository reportStaffRpDetailsRepo;

    @Override
    public void saveOrUpdate(List<ReportStaffRpDetails> entities) {
        reportStaffRpDetailsRepo.saveOrUpdate(entities.stream().map(e -> {
            ReportStaffRpDetailsModel model = new ReportStaffRpDetailsModel();
            BeanUtils.copyProperties(e, model);
            return model;
        }).collect(Collectors.toList()));
    }
}

存储库

import java.io.Serializable;
import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.NoRepositoryBean;

@NoRepositoryBean
public interface AbstractRepository<T, ID extends Serializable> extends JpaRepository<T, ID> {

   default void saveOrUpdate(List<T> entities) {
        save(entities);//save method from JpaRepository
    }
}

0 个答案:

没有答案