Java 如何重新声明@Embedded using Room for Android的索引?
使用Room注释@Embedded是一种简化1:1层次结构的简便方法,以便能够从Java/Kotlin中更轻松地使用它,但我在理解和摆脱嵌入列方面遇到了困难 架构如下所示:Java 如何重新声明@Embedded using Room for Android的索引?,java,android,kotlin,android-room,Java,Android,Kotlin,Android Room,使用Room注释@Embedded是一种简化1:1层次结构的简便方法,以便能够从Java/Kotlin中更轻松地使用它,但我在理解和摆脱嵌入列方面遇到了困难 架构如下所示: @Entity class TicketRecord { @PrimaryKey var id: String = "" @Embedded(prefix = "origin_") var origin: TicketLocationRecord? = null } @Entity(fo
@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
}
我如何消除警告,或者通过抑制它们(我想它们不再是真正需要的?)或者通过重新声明它们来修复它?我想通过将以下内容添加到
TicketRecord
@SuppressWarnings(RoomWarnings.INDEX_FROM_EMBEDDED_ENTITY_IS_DROPPED)
或
看看哪个有效
我认为您不需要重新声明索引,因为带有索引的var基本上与TicketRecord
中的id值相同,id是主键。我认为主键在sql中是默认索引的
origin_ticketRecordId甚至被添加到合并表中,这给我留下了深刻的印象。这是多余的,对吗?这对我没有帮助。这方面有更新吗?谢谢,你是怎么修好的?
@SuppressWarnings(RoomWarnings.INDEX_FROM_EMBEDDED_FIELD_IS_DROPPED)