El uso de la anotación de habitaciones @Embedded es una forma práctica de aplanamiento una relación 1: 1 jerarquía de poder trabajar con él más fácil desde Java / Kotlin, pero estoy teniendo problemas para entender y deshacerse de las advertencias relacionadas con un índice asociado de la columna incrustado.
El esquema es el siguiente:
@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
}
Sigo recibiendo la siguiente advertencia:
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;
Incluso si trato de redeclare los índices como el siguiente:
@Entity(indices = [
Index(value = ["origin_ticketRecordId"], unique = true)
])
class TicketRecord {
@PrimaryKey
var id: String = ""
@Embedded(prefix = "origin_")
var origin: TicketLocationRecord? = null
}
¿Cómo me deshago de la advertencia, ya sea mediante la supresión de ellos (supongo que ya no son realmente necesarios?) O realmente fijándolo mediante re-declarándolos?
Supongo agregando la siguiente a TicketRecord
@SuppressWarnings(RoomWarnings.INDEX_FROM_EMBEDDED_ENTITY_IS_DROPPED)
o
@SuppressWarnings(RoomWarnings.INDEX_FROM_EMBEDDED_FIELD_IS_DROPPED)
ver cuál funciona.
Creo que ya no tienes que redeclare el índice como el var con el índice es, básicamente, el mismo valor que id en TicketRecord
e id es la clave principal. Creo que las claves primarias son indexados por defecto en SQL.
Estoy impresionado de que origin_ticketRecordId incluso se agrega a la tabla resultante de la fusión. es justo redundante?