【问题标题】:Spring data: bulk delete list of entitiesSpring数据:批量删除实体列表
【发布时间】:2020-10-20 15:36:40
【问题描述】:

如何使用具有实体列表的 Spring JPA 批量删除?

以下将起作用: void deleteByIdIn(List<Integer> ids)

但我确实有一个实体列表,而不是 ID。我可以将列表转换为 id 列表,但我不想这样做。

我正在寻找类似的东西:void deleteAll(List<Entitity> entities)

【问题讨论】:

    标签: java spring jpa spring-data


    【解决方案1】:

    但是CrudRepository 正好有那个方法:deleteAll

    JpaRepository 有:deleteInBatch

    【讨论】:

      【解决方案2】:

      根据您使用的 repo(Repository 和所有继承者),您可以调用

      void deleteById(Long id);
      
      void delete(Identity entity);
      
      void deleteAll(Iterable<? extends Identity> entities);
      
      void deleteInBatch(Iterable<T> entities);
      
      void deleteAllInBatch();
      

      或者创建类似的东西

      @Query("Delete From Identity i Where i.id In :ids")
      void deleteCustom(@Param("ids") Iterable<? extends Long> ids);
      

      【讨论】:

        【解决方案3】:

        你需要重写这个方法:void deleteAll(Listentities)

         void delete(Entitity entities){
             repo.delete(entities);
         }
        
        void deleteAll(List<Entitity> entities){
           foreach(Entitity entitie:entities){
             delete(entitie);
         }
        }
        

        【讨论】:

        • 可以,但是非常耗时,而且必须是事务性的,所以可能会导致bdd lock。顺便说一句,SpringJPARepository已经存在批量删除,再建一个也没用。
        猜你喜欢
        • 2017-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-11
        • 2020-06-21
        • 1970-01-01
        相关资源
        最近更新 更多