OnConflictStrategy.IGNORE не работает КОМНАТАAndroid

Форум для тех, кто программирует под Android
Anonymous
OnConflictStrategy.IGNORE не работает КОМНАТА

Сообщение Anonymous »

У меня проблема: когда я вставляю новый элемент в таблицу, возникает исключение: android.database.sqlite.SQLiteConstraintException: ограничение UNIQUE не выполнено: DayCalorieData.date (код 1555 SQLITE_CONSTRAINT_PRIMARYKEY) , но я не понимаю почему. Потому что я установил OnConflictStrategy.IGNORE. Вот код для моей базы данных:
Entity:

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

@Entity(
tableName = "dayNutrientAmount",
primaryKeys = ["date", "nutrientId"],
indices = [Index(value = ["date", "nutrientId"], unique = true)]
)
data class DayNutrientAmount(
val date: String,
val nutrientId: Int,
val receivedAmount: Int = 0,
)
Дао:

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

@Insert(onConflict = OnConflictStrategy.IGNORE)
suspend fun insertNewDayNutrient(dayNutrientAmount: DayNutrientAmount)
ViewModel:

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

fun insertNewDayNutrientAmount(nutrientId: Int, date: String) {
viewModelScope.launch(Dispatchers.IO) {
mainScreensRepositoryImpl.insertDayNutrientAmount(DayNutrientAmount(
date, nutrientId
))
}
}
Пользовательский интерфейс:

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

val nutrients = homeScreenVM
.getAllNutrients()
.collectAsState(initial = emptyList())
.value
LaunchedEffect(key1 = nutrients, key2 = selectedDate) {
nutrients.forEach { nutrient ->
homeScreenVM.insertNewDayNutrientAmount(nutrient.nutrientId, selectedDate)
}
}
Я не думаю, что код viewModel и код пользовательского интерфейса необходимы для понимания. Но я оставил это на всякий случай.
Мне нужна уникальная комбинация даты и идентификатора питательного вещества, и они не обязательно должны быть первичными ключами. Я попытался добавить простой ключ для каждой строки (просто целочисленный идентификатор) вместо того, чтобы создавать первичные ключи питательного идентификатора и даты. Но результат был тот же. Заранее спасибо

Подробнее здесь: https://stackoverflow.com/questions/785 ... -work-room

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