Spring Data JPA - Массовое обновление не работает - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть базовое приложение SpringBoot 2.1.1.RELEASE.Используя Spring Initializer, JPA, встроенный Tomcat и пакет в качестве исполняемого JAR-файла с архитектурой restful, у меня есть этот репозиторий:

@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);


}

, но я не обновляю строки в DB

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Я не уверен в том, что вы хотите сделать, но в качестве запроса на обновление вы также можете использовать функцию save() из CrudRepository, выбрав первичный ключ id для raw, который вы хотите обновить в своей таблице..

Другой момент - это параметры List<Long> notificationIdList, которые вы хотите учесть. Вы уверены, что можете дать список для @Param?Если нет, вы можете использовать цикл for для элементов списка и вызывать функцию запроса changeNotificationListReadStatus() на каждой итерации.

0 голосов
/ 17 декабря 2018

Попробуйте этот код,

    @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);

, если возникнут проблемы, сообщите.

...