Выбор ответа Junior Room и хранение данных обновлено

Аннотация @Upsert в Room

Вопрос

Что делает аннотация @Upsert у метода DAO?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Вставляет новые строки и обновляет существующие по ключу. @Upsert (Room 2.5+) пытается вставить строку, а при конфликте первичного ключа обновляет её.

Варианты ответа

  1. Вставляет строку, а при конфликте ключа бросает исключение
  2. Удаляет строку с тем же ключом и вставляет её заново
  3. Вставляет новые строки и обновляет существующие по ключуправильный ответ
  4. Обновляет существующие строки, а новые пропускает

Разбор

@Upsert (Room 2.5+) пытается вставить строку, а при конфликте первичного ключа обновляет её. В отличие от @Insert(onConflict = REPLACE), который удаляет старую строку и вставляет новую, @Upsert не удаляет запись, поэтому не срабатывают каскадные удаления по внешним ключам. Обычный @Insert при конфликте бросит исключение (стратегия ABORT), а @Update просто пропустит отсутствующие строки.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.