Использование класса Room Entity в качестве модели, в то время как ионное поле из базы данных - PullRequest
0 голосов
/ 12 января 2020

Я использую Класс сущности в качестве модели для Ответ API в нем есть поле List<Address> Я хочу это на этапе сериализации, но хочу игнорировать это из хранится в базе данных, так как для этого потребуется TypeConverter , и я этого не хочу.


@Entity(tableName = "USER")
data class User(
    @Ignore
    @SerializedName("address")
    val address: List<Address>?,
    @SerializedName("auth_token")
    @ColumnInfo(name = "authToken")
    val authToken: String?)

Я использовал @Ignore, но получил эту ошибку

error: Entities and Pojos must have a usable public constructor. You can have an empty constructor or a constructor whose parameters match the fields (by name and type).
public final class User {
             ^

Intelli J

Подсказка: я не хотел сохранять это поле в дБ

Ответы [ 2 ]

0 голосов
/ 12 января 2020

Ошибка говорит вам, что не так:

У вас может быть [...] конструктор, параметры которого соответствуют полям (по имени и типу)

Комната должна знать, как построить свой объект из базы данных. Когда вы используете @Ignore для параметра, он не отображается как поле. Вот почему параметры и поля не совпадают.

Для этого не следует помещать поля @ Ignore d в конструктор. Попробуйте сделать следующее:

@Entity(tableName = "USER")
data class User(
    @SerializedName("auth_token")
    @ColumnInfo(name = "authToken")
    val authToken: String?) {

    @Ignore
    @SerializedName("address")
    val address: List<Address>? = null

}

0 голосов
/ 12 января 2020

Я думаю, проблема в том, что вы не указываете значение по умолчанию для адреса переменной. Попробуйте с этим:

@Entity(tableName = "USER")
data class User(
  @SerializedName("auth_token")
  @ColumnInfo(name = "authToken")
  val authToken: String?
  @Ignore
  @SerializedName("address")
  val address: List<Address>? = null,
  )
...