gpt4 book ai didi

hibernate - Spring MVC 中的 JPA Hibernate 批量/批量更新

转载 作者:行者123 更新时间:2023-12-04 08:26:24 25 4
gpt4 key购买 nike

我是 Spring MVC 的新手,对 JPA 也没有太多想法。我想要做的就是更新记录列表,当我遍历列表并在 DAO 上调用 update 时,它​​可以正常工作。

但我不想执行 100 次更新/插入操作或数据库往返。

任何人都可以告诉我如何使用批量更新而不是执行以下操作来更新大约 100 条记录:

Controller:
List<MyEntity> list = form.getList();
for(MyEntity e : list){
dao.update(e);
}

Dao:
public T update(T entity){
entityManager.merge(entity);
}

是否有可能,如果有人可以为我提供一种执行批量更新的简单方法。如果我能得到尽可能多的解释,我将不胜感激。

谢谢

最佳答案

您所拥有的几乎是通过 JPA 更新多行的标准方法。事件 spring-data-jpa暴露 save(Iterable<T> items)只是在 Iterator 上循环在封面下。 here的另一个问题在选项上得到了很好的回答,但简而言之,您走在正确的道路上,另一种选择是自己制定和执行更新语句。

更新:
在单个事务中执行可能会提高性能,因为您只有一次事务开销。您还会遇到这样的情况:如果其中一个更新失败,则任何先前的更新也会回滚。 (因此,您可能会丢失以前更新中的所有“工作”-您可能想要也可能不想要)

另外,请注意您正在使用的事务管理器类型(例如 JTA 或 JPA)和 JPA 实现(例如 Hibernate),因为有时它们不能很好地配合使用。

所以,在你的 DAO 代码中你可能想要这样做;

  • 添加重载 update(Iterator<Entity> entities)代码
  • 在该代码中执行以下操作;
    entityManager.getTransaction().begin();//start the transactionfor (Entity entity : entities) {
        entityManager.merge(entity);//update an entity
    }entityManager.getTransaction().commit();//complete the transaction
  • 或者您可以使用 @Transactional您的 save(Iterable<Entity> entities) 上的注释方法。确保您在 Spring Context 中也有事务注释支持
  • 关于hibernate - Spring MVC 中的 JPA Hibernate 批量/批量更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17625955/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com