批量更新 springboot jpa

问题描述

我需要一次更新超过 1000-2000 笔交易的单列(状态)。要更新的值相同,例如所有行的“已处理”。我不想迭代我的列表并更新,而是在 jpa 本身中寻找批量更新。我还想避免显式使用实体管理器。

解决方法

使用标准的 Spring-boot JPA 可以使用类似的方法:

return new Promise(resolve => {
    this.infos.map(info => {
        info.members.map(member => {
            member.contacts.map(contact => {
                dataSource.push({
                    contact,member
                });
            });
        });
    });
    this.dataSource = new MatTableDataSource(dataSource);
    resolve();
});

测试代码:

public interface WidgetRepository extends CrudRepository<Widget,Long> {
    @Override
    List<Widget> findAll();

    @Modifying(clearAutomatically = true,flushAutomatically = true)
    @Query("update Widget w set w.status = :status where w in :widgets")
    void setStatus(@Param("status") String status,@Param("widgets") List widgets);
}

它应该在一个事务中完成所有更新。