当前位置: 首页 > 面试题库 >

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

唐珂
2023-03-14
问题内容

~~~~

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

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

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

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


问题答案:

~~~~

来自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,性能或执行的查询就没有真正的区别。



 类似资料:
  • 问题内容: 在Hibernate中,当我在事务中有一个对象,然后回滚它时,保存的对象仍保留在DB中。奇怪,因为使用or 方法不会发生此问题,而只会使用。 这是我正在使用的代码: 这是 HibernateUtil 类(只是涉及的函数,我保证该方法能正常工作- 有一个Interceptor处理程序,但现在不重要了): 谢谢 问题答案: 检查数据库是否支持回滚,即是否使用的是InnoDB表而不是MyIS

  • 在以下代码中: 无论我是否注释/取消注释事务,它们都工作正常,即没有事务也保存操作成功执行。但是当我检查留档时,他们总是在插入更新删除之前使用事务。有什么具体原因吗?我错过了什么吗? 请告诉我这件事。我相当困惑:( 当做

  • 问题内容: 在Spring CrudRepository中,我们是否支持字段的“ IN子句”?即类似于以下内容? 如果没有这样的支持,可以考虑哪些优雅的选择?触发每个ID的查询可能不是最佳选择。 问题答案: 应该可以。 HTTP请求参数格式如下所示: JPA存储库关键字它表明这是等效的-如果你更喜欢动词以提高可读性-并且JPA还支持和。

  • 我有一个使用Hibernate/JPA的持久性Spring Boot应用程序。 我正在使用事务来管理我的数据库持久性,并且我正在使用注释来定义应该以事务方式执行的方法。 在持久化时,我有三个主要的事务粒度级别: 要保留的实体批次 要保留的单个实体 保留实体的单一数据库操作 因此,在考虑整个持久性流量时,您可以想象我有三个级别的嵌套事务。 第2层和第3层之间的交互如我所愿透明地工作,因为在没有为事务

  • 本文向大家介绍Hibernate中save()和persist()之间的区别,包括了Hibernate中save()和persist()之间的区别的使用技巧和注意事项,需要的朋友参考一下 Save()和这两种方法都用于在数据库中保存对象。  根据文档- Save()-坚持给定的瞬时实例,首先分配一个生成的标识符。(或者,如果使用分配的生成器,则使用标识符属性的当前值。)如果关联是用cascade

  • 我使用的是Spring Boot 2.5.2和Spring Cloud 2020.0.3。我正在尝试包装一个rest服务调用,该调用使用JPA(CrudRepository.save)将记录保存到DB,然后使用StreamBridge使用spring cloud stream(Kafka binder)将消息发布到Kafka主题。我试过好几种方法,但似乎没有一种效果很好。我故意造成JPA问题(插入