java - Spring Data JPA 保存方法在 Java 8 功能图中的有效性

标签 java spring hibernate java-8 spring-data-jpa

当将 Spring Data 与 Java 8 一起使用时,我们有两个选项来保存集合:

  1. 我们可以使用经典的List<S> save(Iterable<S> entities)获取整个列表的方法。
    示例:

    someOtherRepository.save(
        someRepository.findAll()
        .stream()
        .map(something -> {
            //some operations
            return someOtherThing;
        })
        .collect(Collectors.toList())
    );
    
  2. 我们可以使用S save(S entity)方法采用单个实体并在 stream 中使用它在 map .
    示例:

    someRepository.findAll()
    .stream()
    .map(something -> {
        //some operations
        return someOtherThing;
    })
    .map(someOtherRepository::save)
    .collect(Collectors.toList());
    

问题是:
这两种方法的执行时间有区别吗?如果是,哪个更有效(更快)。

最佳答案

save(Iterable<S> entities)依赖于迭代和调用 save(S entity) :

@Transactional
public <S extends T> List<S> 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;
}

因此,两者在性能方面应该给出相同的结果。

要进行批量插入,您必须在 hibernate 配置 ( hibernate.jdbc.batch_size ) 中指定它并自行处理刷新。

关于java - Spring Data JPA 保存方法在 Java 8 功能图中的有效性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45342603/

相关文章:

java - 锯齿状阵列 : Illegal Start of Expression

spring - 使用 Java 配置配置 Spring Web Flow

java - 使用 ObjectMapper 反序列化对象时将驼峰命名法转换为下划线

java - testng 类中的 Spring @ContextConfiguration 测试配置每个测试类只创建一次 beans,而不是每个测试

mysql - 在 Mysql 中加入 HQL 更新的替代方法

java - 在收到对等方的 close_notify 之前关闭入站

java - 当用户单击我的应用程序窗口上的某个点时,如何更改 java 中的背景颜色?

java - unity hub 无法安装open JDK

java - Postgresql 与 Hibernate : could not determine LocalDate type in jpql query

java - 列表大小应该是 2 但它给出了 3 为什么?