代码之家  ›  专栏  ›  技术社区  ›  Nuñito Calzada

Spring数据JPA-大规模更新不起作用

  •  0
  • Nuñito Calzada  · 技术社区  · 5 年前

    我有一个基本的SpringBoot2.1.1.发布应用程序。使用Spring初始值设定项、JPA、Embedded Tomcat和Package作为具有RESTful体系结构的可执行JAR,我拥有这个存储库:

    @Repository
    public interface MenuPriceAlertNotificationRepository 
                        extends CrudRepository<MenuPriceAlertNotification, Long> {
    
    
    
    
        @Transactional
        @Modifying
        @Query("update MenuPriceAlertNotification n set n.read = :status where n.id in :notificationIdList and n.user.id = :userId")
        void changeNotificationListReadStatus(  @Param("notificationIdList") List<Long> notificationIdList, 
                                                @Param("userId") long userId, 
                                                @Param("status") boolean status);
    
    
    }
    

    但不更新数据库中的行

    2 回复  |  直到 5 年前
        1
  •  1
  •   avishka eranga    5 年前

    试试这个代码,

        @Transactional(propagation =Propagation.REQUIRED,isolation=Isolation.SERIALIZABLE,readOnly=false,transactionManager="transactionManager")
    @Query("update MenuPriceAlertNotification n set n.read = :status where n.id in :notificationIdList and n.user.id = :userId")
    void changeNotificationListReadStatus(  @Param("notificationIdList") List<Long> notificationIdList, 
                                            @Param("userId") long userId, 
                                            @Param("status") boolean status);
    

    如果有任何问题,请通知。

        2
  •  0
  •   Badvyn    5 年前

    我不确定您要做什么,但是作为一个更新查询,您还可以使用 save() 函数来自 CrudRepository 通过选择要在表中更新的原始数据的ID主键。

    另一点是 List<Long> notificationIdList 要考虑的参数,是否确定可以将列表提供给 @Param ?如果没有,可以对列表的元素使用for循环并调用查询函数 changeNotificationListReadStatus() 每次迭代时。