我在 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
}
}