Как повторно объявить индекс @Embedded с помощью Room для Android? - PullRequest
0 голосов
/ 31 марта 2020

Использование аннотации Room @Embedded - это удобный способ выровнять иерархию 1: 1, чтобы было проще работать с ней из Java / Kotlin, но у меня возникают проблемы с пониманием и избавлением от предупреждения, связанные со связанным индексом встроенного столбца.

Схема выглядит следующим образом:

@Entity
class TicketRecord {

    @PrimaryKey
    var id: String = ""

    @Embedded(prefix = "origin_")
    var origin: TicketLocationRecord? = null
}

@Entity(foreignKeys = [(ForeignKey(entity = TicketRecord::class, parentColumns = arrayOf("id"), childColumns = arrayOf("ticketRecordId"), onDelete = ForeignKey.CASCADE))],
    indices = [Index("ticketRecordId")])
class TicketLocationRecord {

    @PrimaryKey
    var id: String = ""

    // ForeignKey
    var ticketRecordId: String? = null
}

Я получаю следующее предупреждение:

warning: Indices defined in TicketLocationRecord will be dropped when it is merged into TicketRecord (origin). You can re-declare them in TicketRecord. - origin in TicketRecord
private TicketLocationRecord origin;

Даже если я попытаюсь переопределить индексы, как показано ниже:

@Entity(indices = [
Index(value = ["origin_ticketRecordId"], unique = true)
])
class TicketRecord {

    @PrimaryKey
    var id: String = ""

    @Embedded(prefix = "origin_")
    var origin: TicketLocationRecord? = null
}

Как мне избавиться от предупреждения, либо подавив его (я полагаю, что он больше не нужен?), Либо фактически исправив его повторно объявив их?

1 Ответ

1 голос
/ 31 марта 2020

Я думаю, добавив следующее к TicketRecord

@SuppressWarnings(RoomWarnings.INDEX_FROM_EMBEDDED_ENTITY_IS_DROPPED)

или

@SuppressWarnings(RoomWarnings.INDEX_FROM_EMBEDDED_FIELD_IS_DROPPED)

, чтобы увидеть, какой из них работает.

Я думаю, вам не нужно переопределять индекс как переменная с индексом в основном совпадает со значением id в TicketRecord, а id является первичным ключом. Я думаю, что первичные ключи индексируются по умолчанию в sql.

Я впечатлен, что origin_ticketRecordId даже добавлен в объединенную таблицу. это избыточно, верно?

...