Выбор ответа Junior Room и хранение данных обновлено
Аннотация @Upsert в Room
Вопрос
Что делает аннотация @Upsert у метода DAO?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Вставляет новые строки и обновляет существующие по ключу. @Upsert (Room 2.5+) пытается вставить строку, а при конфликте первичного ключа обновляет её.
Варианты ответа
- Вставляет строку, а при конфликте ключа бросает исключение
- Удаляет строку с тем же ключом и вставляет её заново
- Вставляет новые строки и обновляет существующие по ключуправильный ответ
- Обновляет существующие строки, а новые пропускает
Разбор
@Upsert (Room 2.5+) пытается вставить строку, а при конфликте первичного ключа обновляет её. В отличие от @Insert(onConflict = REPLACE), который удаляет старую строку и вставляет новую, @Upsert не удаляет запись, поэтому не срабатывают каскадные удаления по внешним ключам. Обычный @Insert при конфликте бросит исключение (стратегия ABORT), а @Update просто пропустит отсутствующие строки.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.