当前位置: 首页 > 知识库问答 >
问题:

我可以在JpaRepository的saveAll中混合使用update和insert吗

祁杰
2023-03-14

我使用Spring Boot和Spring Data JPA和Hibernate作为持久性提供程序。我已经使用JPARepository扩展了我的Repository接口。我有一个表的实体Bean列表。其中一些已经存在,一些不存在。

我想知道当我从我的服务层调用saveAll并传递此列表时会发生什么?

共有1个答案

汪修诚
2023-03-14

如果您查看SimpleParepository,它是CrudRepository的常见实现,您可以看到它只会为每个元素调用save:

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

    Assert.notNull(entities, "The given Iterable of entities not be null!");

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

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

    return result;
}

保存本身区分是持久化还是合并给定实体:

@Transactional
public <S extends T> S save(S entity) {

    if (entityInformation.isNew(entity)) {
        em.persist(entity);
        return entity;
    } else {
        return em.merge(entity);
    }
}

所以要回答你的问题。。是的,您可以在过程列表中混合新实体和现有实体。

 类似资料:
  • 我正在编写一些从第三方库扩展类的JUnit测试。超级类扩展了,所以根据定义,我的子类也扩展了。 在我的子类中,我用前缀编写测试方法,然后执行这些方法。 但是,出于许多原因,我们希望转移到JUnit4(其中一个原因是,我们不希望必须在测试方法前缀) 我尝试过使用JUnit4注释简单地编写新测试,但这些方法没有得到执行。 例如: 不扩展第三方测试类不是一个选项。(值得注意的是,Spring的又扩展了其

  • 既然有一个,那么当使用时,有没有办法刷新更新的实体? 我试图按批处理更新实体。 真的会有很大的帮助! 非常感谢。

  • 问题内容: 我已经搜索过网络,到目前为止,我所看到的是您可以一起使用和含义: 要么 是有效的,但是当我使用此代码时,得到的是: 对于第一个,除了与相同。对于第二个。 问题是什么?我不能使用和在一起?还是正常?是我可以检查连接是否全部有效的方法吗?() 问题答案: 不,你不能使用和在一起。它们是独立的API,它们创建的资源彼此不兼容。 虽然有一个。

  • 是否可以使用来强制执行特定类型或字符串文本的存在? 示例: 或者它只是将PropTypes.bool视为它返回的任何字面值?在官方留档中找不到任何参考资料,所以我假设它不像我期望的那样工作。不过,这不会产生错误。

  • 我的经验主要是使用React Hooks 在一个新项目中,我必须使用React钩子 这很有效。 我的情况是这样的:我需要一个动作来创建一个“空”公司,所以没有必要创建一个动作创造者。因此,我创建了一个这样的行动: 对于Action Creator,我从内部调用它,如下所示: 对于这个动作,我想我可以用一种类似于我总是用上下文来称呼动作的方式来称呼它,比如: 不幸的是,我遇到了这个流错误:“无法从值

  • 问题内容: 我可以在mysql中使用聚合函数(LAST)吗? 如果是,那么为什么给我以下查询错误: 错误 ::您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以在第1行的’()FROM group by ‘ 附近使用正确的语法 编辑 ::我得到答案“最后一个”不在MySql中使用。那么如何在MySql中执行呢? 问题答案: 不,在mysql中没有所谓的LAST 查看汇总函数列表