Как вставить повторяющуюся строку в комнату Db? - PullRequest
0 голосов
/ 06 мая 2020

Во время поиска я встречал людей, которые спрашивали, как избежать вставки повторяющихся строк с помощью room db. Но в моем приложении есть функция, в которой пользователь может нажать кнопку копирования, и элемент списка снова будет вставлен в базу данных. Я мог бы просто добиться этого, если бы моя таблица не имела первичного ключа, установленного в одном из ее полей. Хотя я нашел это решение для SQLite, я не знаю, как я могу добиться этого в комнате Db. Потому что при написании запроса на вставку с пользовательскими запросами в комнате, в первую очередь, будет нарушена цель использования комнаты.

1 Ответ

1 голос
/ 06 мая 2020

Допустим, у вас есть сущность

@Entity(tableName = "foo_table")
data class Foo (
    @PrimaryKey(autoGenerate = true) var id: Int,
    // or without autogeneration
    // @PrimaryKey var id: Int = 0,
    var bar:String
)

, и у вас есть Dao со вставкой:

@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insert(foo: Foo)

Затем, чтобы скопировать существующее значение (copiedValue: Foo), вам нужно способ управления первичным ключом:

  1. Сценарий 1 . Ваш первичный ключ создается автоматически, вы должны установить его значение по умолчанию, чтобы получить новый автоматически сгенерированный:

    copiedValue.id = 0 yourDao.insert(copiedValue)

  2. Сценарий 2 . Ваш первичный ключ не генерируется автоматически, вам нужно установить новый первичный ключ вручную:

    copiedValue.id = ... // some code to set new unique id yourDao.insert(copiedValue)

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