#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)
. Очень странно, что не работает