Не удается обновить объект в Room Kotlin

#android #android-studio #kotlin #android-room

#Android #android-студия #котлин #android-room

Вопрос:

Мне нужно обновить весь объект, поэтому я попробовал с помощью @Update, но это не работает, а в запросе на ОБНОВЛЕНИЕ слишком много полей. Так что же я мог сделать?

 @Update
updatePackage(item: Package)

@Query("UPDATE PackageEntity SET weight = :weight ...[[TOO MANY FIELDS]] WHERE id = :id")

    @Entity
    data class PackageEntity(
    @PrimaryKey(autoGenerate = true) var id: Int? = -1,
    @ColumnInfo(name = "weight") var weight: Double = 0.0,
    @ColumnInfo(name = "unitType") var unitType: Options.UnitTypes = Options.UnitTypes.MT,
    @ColumnInfo(name = "high") var high: Number = 0.0,
    @ColumnInfo(name = "length") var length: Number = 0.0,
    @ColumnInfo(name = "wide") var wide: Number = 0.0,
    @ColumnInfo(name = "quantity") var quantity: Int = 0,
    @ColumnInfo(name = "description") var description: String = "",
    @ColumnInfo(name = "loadType") var loadType: Options.LoadTypes = Options.LoadTypes.GENERAL,
    @ColumnInfo(name = "cityOrigin") var cityOrigin: SimpleClass = SimpleClass(),
    @ColumnInfo(name = "cityDestine") var cityDestine: SimpleClass = SimpleClass(),
    @ColumnInfo(name = "pickup")var pickup: Boolean = true,
    @ColumnInfo(name = "deliver")var deliver: Boolean = true
    )
 

Ответ №1:

Ммм, это странно… вы могли бы попробовать что-то вроде

 @Insert(onConflict = OnConflictStrategy.REPLACE)
fun updatePackage(item: Package)
 

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

1. Вставить новый объект с тем же идентификатором? Не могли бы вы опубликовать класс пакета?

2. Да, я опубликовал редактирование, только метод обновления не работает, потому что вставка, удаление и запросы являются обычными

3. Попробуйте изменить PK на @PrimaryKey(autoGenerate = true) val id: Long и попробуйте @Update(onConflict = OnConflictStrategy.REPLACE) . Очень странно, что не работает