«Ограничение FOREIGN KEY не удалось» при обновлении строкиAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 «Ограничение FOREIGN KEY не удалось» при обновлении строки

Сообщение Anonymous »

В базе данных моей комнаты есть два объекта:

Код: Выделить всё

@Entity(
tableName = "user",
primaryKeys = ["id"],
)
data class User(
@ColumnInfo(name = "id")
val userId: Long,

// Other columns here
)

@Entity(
tableName = "entry",
primaryKeys = ["id"],
foreignKeys = [
ForeignKey(
entity = User::class,
parentColumns = ["id"],
childColumns = ["user_id"],
onDelete = ForeignKey.CASCADE,
),
],
)
data class Entry(
@ColumnInfo(name = "id")
val id: Long,

@ColumnInfo(name = "user_id")
val userId: Long,

@ColumnInfo(name = "active")
val active: Boolean,
)
У меня также есть DAO, которые могут с ними работать. Соответствующим методом DAO является тот, который обновляет «активный» столбец для записей:

Код: Выделить всё

@Query("SELECT * FROM entry WHERE id = :id")
suspend fun getEntry(id: Long): Entry?

@Update
suspend fun updateEntry(entry: Entry)
Затем у меня есть этот код, который обновляет активный статус:

Код: Выделить всё

suspend fun setActive(entryId: Long) {
val entry = dao.getEntry(entryId)
entry?.let {
dao.updateEntry(entry.copy(active = true))
}
}
Однако в рабочей среде у некоторых пользователей вызовы функции setActive() вызывают исключение SQLiteConstraintException: код ошибки 19: сбой ограничения FOREIGN KEY. Что может быть причиной этого? Насколько мне известно, onDelete = CASCADE должен удалять записи, если пользователь удален. Кажется, в моих журналах не указано, происходит ли бросок при вызове getEntry() или вызове updateEntry().

Подробнее здесь: https://stackoverflow.com/questions/783 ... ting-a-row
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»