一尘不染

CrudRepository和Hibernate: ~~事务中的~~ save(List ~~)vs save(Entity)~~

hibernate

~~~~

如果这样做,会有所不同吗:

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

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

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


阅读 485

收藏
2020-06-20

共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;
}

因此,save(Iterable<S> entities)从某种意义上说,您的第二种业务方法仅对Crud
Repository方法产生了阴影,它会迭代列表并save(S)代表您进行调用。

只要从您的业务方法中 划定事务processData,性能或执行的查询就没有真正的区别。

2020-06-20