Номер. ошибка: несколько полей имеют одинаковое columnName - PullRequest
1 голос
/ 09 января 2020

Я пытаюсь создать связь между таблицами, где одна из таблиц ссылается на другую дважды. Вот код:

@Entity(tableName = "message",
        foreignKeys = [
            ForeignKey(entity = Contact::class,
                    parentColumns = ["id"],
                    childColumns = ["toContactId"],
                    onDelete = NO_ACTION
            ),
            ForeignKey(entity = Contact::class,
                    parentColumns = ["id"],
                    childColumns = ["fromContactId"],
                    onDelete = NO_ACTION)
        ], indices = [Index("toContactId"), Index("fromContactId")]
)
data class Message(
        @PrimaryKey var id: String,
        var creationDate: Date,
        var messageStatus: MessageStatus,
        var toContactId: String,
        var fromContactId: String,
        var text: String
)


@Entity(tableName = "contact")
data class Contact(
        @PrimaryKey val id: String,
        val firstName: String,
        val lastName: String,
        val cellPhone: String,
        val email: String
)

А вот как я создал класс «отношений»:

data class MessageRelations(@Embedded var message: Message,
                                @Embedded var toContact: Contact,
                                @Embedded var fromContact: Contact)

Этот подход приводит к ошибке : несколько полей имеют одинаковое имя_ столбца : Я бы. Имена полей: message> id, toContact> id, fromContact> id.

Я также пытался добавить префиксы к аннотации @ Embedded (prefix = "to _") и @ Embedded (prefix = "from _") . Но в этом случае Room не может найти совпадения между полями, возвращаемыми запросом, и файлами в MessageRelations классе.

Буду благодарен за любые подсказки о том, как решить эту проблему.

1 Ответ

1 голос
/ 09 января 2020

Полагаю, что использование @ Relation вместо @ Embed решит эти проблемы, вместо того чтобы включать поля / переменные из сущности, в которой он строит объект в соответствии с отношениями.

Таким образом, у вас будет что-то вроде: -

data class MessageRelations(@Embedded var message: Message,
                                @Relation(parentColumn = "toContactId", entityColumn = "id") var toContact: Contact,
                                @Relation(parentColumn = "fromContactId", entityColumn = "id") var fromContact: Contact)
  • Обратите внимание, что приведенный выше является принципиальным кодом и не был проверен или запущен .
...