CrudRepository and Hibernate: save(List<S>) vs save(Entity) in transaction [已关闭]

2022-09-01 10:30:48

如果我这样做,会有什么不同吗:

@Transactional
public void processData() {
    List<MyEntity> entities = ....;
    MyEntityRepository.save(entities);
}

断续器

@Transactional
public void processData() {
    List<MyEntity> entities = ....;
    for (MyEntity entity : entities) {
        MyEntityRepository.save(entity);
    }
}

基础查询和性能有什么区别?


答案 1

从:SimpleJpaRepository

@Transactional
public <S extends T> List<S> More save(Iterable<S> entities) {

    List<S> result = new ArrayList<S>();

    if (entities == null) {
        return result;
    }

    for (S entity : entities) {
        result.add(save(entity));
    }

    return result;
}

因此,您的第二个业务方法仅隐藏 Crud Repository 方法,因为它会代表您迭代列表和调用。save(Iterable<S> entities)save(S)

只要事务与您的业务方法划分,在执行的性能或查询方面就没有真正的差异。processData


答案 2

正如Ori Dar所提到的,实际上没有区别。

但是,您应该注意一件事:根据存储库历史记录,用于保存元素列表的方法已在2.2.0.M1中重命名为,并且该方法不再将列表作为参数。<S extends T> List<S> saveAll(Iterable<S> entities)save

由于我没有50个声誉来评论上面的答案或问题,我必须写一个关于此更改的新答案。


推荐