Комната Android Несколько полей имеют одинаковый столбец Имя - PullRequest
1 голос
/ 13 июня 2019

Я столкнулся с определенной проблемой с комнатой.У меня есть объект

@Entity(tableName = "classifieds")
data class ClassifiedBean(
    @PrimaryKey
    @ColumnInfo(name = "id")
    @SerializedName("id")
    var id: String,

    @Embedded
    @SerializedName("client")
    var clientBean: ClientBean,

    @Embedded
    @SerializedName("location")
    var locationBean: LocationBean
)

Здесь у меня есть объект LocationBean и ClientBean.

Проблема внутри моего ClientBean, у меня также есть LocationBean с таким же атрибутом (адрес, postalCode, city,страна ...).

data class ClientBean(
    @ColumnInfo(name = "client_id")
    @SerializedName("id")
    var id: Int,

    @ColumnInfo(name = "name")
    @SerializedName("name")
    var name: String,

    @Embedded
    @SerializedName("location")
    var locationBean: LocationBean
)

здесь вы можете найти мой LocationBean

data class LocationBean (
    @ColumnInfo(name = "location_id")
    @SerializedName("locationId")
    var id: Int,

    @ColumnInfo(name = "country")
    @SerializedName("country")
    var country: String,

    @ColumnInfo(name = "city")
    @SerializedName("city")
    var city: String,

    @ColumnInfo(name = "address")
    @SerializedName("address")
    var address: String,

    @ColumnInfo(name = "postal_code")
    @SerializedName("postalCode")
    var postalCode: String,

)

Здесь моя ошибка:

error: Multiple fields have the same columnName: location_id. Field names: clientBean > locationBean > id, locationBean > id.

Одним из решений является создание2 разных объекта с таким же атрибутом, но я хотел бы знать, есть ли у них другое решение?

Спасибо за помощь

1 Ответ

4 голосов
/ 13 июня 2019

Попробуйте использовать префикс со встроенным, как @Embedded (prefix = "prefix_"). Надеемся, что изменение класса ClientBean на приведенный ниже код будет работать нормально

data class ClientBean(
        @ColumnInfo(name = "client_id")
        @SerializedName("id")
        var id: Int,

        @ColumnInfo(name = "name")
        @SerializedName("name")
        var name: String,

        @Embedded(prefix = "client_bean_")
        @SerializedName("location")
        var locationBean: LocationBean
)

Поскольку при использовании @Embedded Room добавляет поля класса Embedded в качестве столбцов в одной таблице. Поэтому, когда есть возможность дублирования имен полей между встроенным классом и классом владельца, попробуйте использовать префикс, чтобы избежать дублирования. Что будет делать Room после добавления префикса, он добавит префикс перед именами столбцов для внедренного класса. Обратитесь к документации, чтобы узнать больше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...