使用QueryDsl、JPA和EclipseLink更新实体列表的最佳方式



使用QueryDsl和JPA, EclipseLink,我需要为实体列表更新同一列,并将修改存储在数据库中,是否存在差异(性能方面):

1 -通过获取所有id并执行单个查询同时更新所有行来实现。

2 -使用entityManager逐个合并更新的实体。

1。

public void updateProcessedForCarList( List<Car> CarList, boolean processed) {
List<Long> ids = CarList.stream().map(v -> v.getId()).collect(Collectors.toList()):
getQuery().update(CAR_TABLE).set(CAR_TABLE.processed, processed)
.where(CAR_TABLE.id.in(ids)).execute();
}

2。

public List<Car> updateProcessedForCarList( List<Car> CarList, boolean processed) {
CarList.stream().forEach(car -> {
car.setProcessed(processed);
getEntityManager().merge(car);
});
return vsCmdbUpdateInfoBEList;
}

这取决于:

选项1要快得多,但是如果您有任何应该执行的逻辑或侦听器将被绕过。此外,您不能继续处理汽车列表,因为它们的状态与数据库的状态不同。

最新更新