Уникальные ограничения не работают в базе данных комнат в Android

#android #android-room-relation

Вопрос:

 @Entity(tableName = "DailyGraphData", indices = [Index(value = arrayOf("lastTimeUsed","beginningTime"), unique = true)]) data class DailyGraphData(  @PrimaryKey(autoGenerate = true)  val id: Int = 0,  var appName: String,  var packageName: String,  var totalAppTimeInForeground: Long? = 0L,  var lastTimeUsed: String? = "",  var beginningTime: String? ="",  var endTime: String? = "",  var isChild: Boolean )  

Это мой класс сущностей, в котором время начала и последнего использования я сохранял уникальность, но когда я пытаюсь запустить приложение, то в первый раз у меня 8 данных, которые поступают и хранятся в таблице, как показано ниже на экране

введите описание изображения здесь

теперь я пытаюсь снова вставить данные со значением 10, в которых 8 совпадают с предыдущими 2 новыми значениями, но на этот раз isChild будет 1 теперь, когда он попытается вставить, я не знаю, почему он обновляет предыдущее значение, см. На экране ниже. введите описание изображения здесь

вы можете увидеть на этом экране все предыдущие обновления значений ischild true, а также еще две записи значений

что я хочу, чтобы, если запись 8 уже вставлена в !ischild и последний раз использовалась, и время начала совпадает, когда я пытаюсь вставить другую, тогда она должна вставить просто вставьте новую, использованную в последний раз, и время начала, пожалуйста, помогите мне, что я делаю неправильно

Комментарии:

1. Похоже, они не обновляются, вы очищаете таблицу перед вставкой новых значений.

Ответ №1:

Это решение, которое я должен был игнорировать, если ограничение верно .

Я дал это :

 @Insert(onConflict = OnConflictStrategy.REPLACE)  

после обновления

 @Insert(onConflict = OnConflictStrategy.IGNORE)  

он не вставляет новые данные, если время начала и время окончания уже есть в таблице базы данных