Tenho um banco de dados de salas com um relacionamento muitos para muitos entre pontos de ônibus e linhas
@Entity(tableName = "BusStops")
data class BusStopEntity(
@PrimaryKey val id: Int = 0,
val name: String,
val lat: Double,
val lon: Double
)
@Entity(tableName = "Lines")
data class LineEntity(
@PrimaryKey val id: Int = 0,
val name: String
)
@Entity(primaryKeys = ["busStopId", "lineId"])
data class BusStopLineEntity(
val busStopId: Int,
val lineId: Int
)
Eu uso esta classe de dados para ter o relacionamento:
data class LineWithBusStops(
@Embedded val line: LineEntity,
@Relation(
parentColumn = "id",
entityColumn = "busStopId",
associateBy = Junction(BusStopLineEntity::class)
)
val busStops: List<BusStopEntity>
)
Mas recebo um erro na @Relation
linhaentityColumn = "busStopId"
Não é possível encontrar a coluna da entidade filho
busStopId
em com.local.model.BusStopEntity. Opções: id, nome, lat, lon
Se eu mudar busStopId
para id
, terei ainda mais erros.
Alguma ideia?
O problema é que a Entidade é um campo/coluna na entidade (tabela) que é referenciada por meio da associação (tabela intermediária) em vez de uma coluna na tabela associativa/intermediária.
Ou seja, a Entidade é uma BusStopEntity , que só tem campos/colunas
id
, ou seja, não há campo/coluna.name
lat
long
busStopId
busStopId
é uma coluna na tabela associativa/intermediária BusStopLineEntity .Provavelmente você deseja usar
id
para a entityColumn do@Relation
.Você pode especificar as respectivas colunas da tabela intermediária usando os parâmetros
parentColumn
eentityColumn
doJunction
Então o seguinte poderia ser usado:-