У меня есть следующий объект:
@Entity
class Foo(
@PrimaryKey
@ColumnInfo(name = "id")
val id: Long,
@ColumnInfo(name = "thing1")
val thing1: String,
@ColumnInfo(name = "thing2")
val thing2: String,
@ColumnInfo(name = "thing3")
val thing3: String,
@ColumnInfo(name = "thing4")
val thing4: String
) {
@ColumnInfo(name = "local")
var local: String? = null
}
Где локальный - это информация, которая не хранится на сервере, а только локально для телефона.
В настоящее время, когда я получаю информацию с сервераGSON автоматически заполняет мои значения, но, поскольку «local» не приходит с сервера, он не заполняется этим объектом.
Есть ли способ, что при вызове update у меня может быть Room пропустить обновление для«локальный» столбец без записи пользовательского обновления для вставки во все остальные столбцы, кроме «локального»?Беда в том, что у меня может быть много столбцов и каждый новый столбец, который я добавляю, мне нужно добавить это в пользовательский оператор вставки.
Я также думал о сопоставлении «один к одному» с серверасущность для новой "локальной" сущности, однако теперь мне приходится сталкиваться с болью оператора объединения везде, где я получаю свою сущность, поскольку мне нужна локальная информация.
Я надеялся, что смогу сделать что-то подобное:
@Entity
class Foo(
@PrimaryKey
@ColumnInfo(name = "id")
val id: Long,
@ColumnInfo(name = "thing1")
val instructions: String,
@ColumnInfo(name = "thing2")
val instructions: String,
@ColumnInfo(name = "thing3")
val instructions: String,
@ColumnInfo(name = "thing4")
val instructions: String
) {
@Ignore
var local: String? = null
}
Использование аннотации @Ignore, чтобы попытаться игнорировать локальную строку в общем обновлении.Затем предоставьте пользовательский оператор обновления, чтобы просто сохранить локальную информацию
@Query("UPDATE foo SET local = :newLocal WHERE foo.id = :id")
fun updateLocal(id: Long, newLocal: String)
Однако ROOM кажется достаточно умным, чтобы проверить, что я использовал @Ignore для локального свойства, и он не скомпилируется с этим оператором обновления.
Есть идеи?