База данных комнат onConflict = OnConflictStrategy.REPLACE не работает - PullRequest
0 голосов
/ 21 мая 2019

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

Ниже приведен кодЯ использую:

// view model
BaseApp.daoInstance?.appDao()?.insertQuotes(response!!)

// dao
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertQuotes(listData: MutableList<Quote>)

Когда я пытаюсь вставить те же данные снова, они всегда вставляются как новые данные вместо , заменяя текущими элементами.

Я много исследовал для этого OnConflictStrategy.REPLACE , но не смог найти какого-либо правильного ответа.

Кто-нибудь сталкивался с той же проблемой и нашел решение, или я делаю что-то не так?

Заранее спасибо ... !!!

1 Ответ

1 голос
/ 21 мая 2019

Номер, не буду проверять и сравнивать, если у вас уже есть цитата в БД.Что он будет делать, так это посмотреть, если первичный ключ уже существует в БД, если он это сделает, Room заменит все старые данные новыми.

В вашем случае вы не указываете идентификатор, поэтому БДсоздать уникальный для вас.Что вы должны сделать, это создать Query, который будет искать эту цитату в БД примерно так:

@Query("SELECT * from quote_table WHERE author = :author AND quote = :quote")
List<Quote> getQuoteByAuthorAndQuote(string author, string quote);

Это должно вернуть список с одной цитатой, если она найдена, и пустую, если она это делает.не существует.

Если вы хотите переопределить старый, просто обновите данные в котировке POJO и вставьте их в базу данных, используя Room.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...