У меня есть Book
объект с 3 первичными ключами (id, ownToTab, propertyOfUserId)
Скажем, у меня есть база данных книг, подобная этой:
book1 (id= 10162, ownToTab = 1, propertyOfUserId = 896)
book1 (id = 10162, ownToTab = 0, propertyOfUserId = 896)
В моем BookDao
интерфейсе я создал методкак это:
@Query("UPDATE BOOK SET isArchived = 1 Where id in (:listId) and propertyOfUserId = :userId")
void updateBookArchived(List<Long> listId, long userId);
Для тестирования у меня есть только один элемент (который составляет 10162) внутри listId
.Когда вызывается этот метод, я извлекаю базу данных и обнаруживаю, что обновляется только одна строка (первая с отношением ownToTab = 1) isArchived = 1. Другая по-прежнему 0 (такая же, как и раньше)
Но если явыполнить запрос в браузере sqlite: UPDATE BOOK SET isArchived = 1 Where id in (10162) and propertyOfUserId = 896
результат идеален, 2 строки обновлены.
Я попытался передать оба значения List<Long>
и Long[]
, но безуспешно.Отладка сгенерированного файла BookDao_Impl
Я вижу, что строка запроса похожа на
UPDATE BOOK SET isArchived = 1 Где id in (?) И propertyOfUserId =?
(еслисписок содержит 3 элемента, тогда это ... Where id in (?,?,?) and ....
), так что я думаю, что передача списка в него работает.Понятия не имею, что было не так.
Спасибо за ваше драгоценное время.
РЕДАКТИРОВАТЬ: Я создал простой проект для проверки проблемы, и запрос работал какожидается.Должна быть другая проблема с .... "структурой" или чем-то еще.Хотел бы я знать, какова возможная причина этой проблемы.