Base de datos de habitaciones con relaciones uno a uno como Dirección, Ciudad y Estado.
Busqué en la documentación de Android para encontrar la respuesta a mi pregunta, pero no pude encontrarla. ¿Cómo puedo obtener una lista de información en Room para crear un RecyclerView utilizando la información contenida en estas clases?
@Entity(
foreignKeys = [
ForeignKey(
entity = City::class,
parentColumns = arrayOf("id"),
childColumns = arrayOf("cityfk"),
onDelete = ForeignKey.NO_ACTION
)
]
)
data class Address(
@PrimaryKey
@ColumnInfo
var id: Long = 0
) : Serializable {
@ColumnInfo
var name: String = ""
@ColumnInfo(index = true)
var cityfk: Long = 0
}
@Entity(
foreignKeys = [
ForeignKey(
entity = State::class,
parentColumns = arrayOf("id"),
childColumns = arrayOf("statefk"),
onDelete = ForeignKey.NO_ACTION
)
]
)
data class City(
@PrimaryKey
@ColumnInfo
var id: Long = 0
) : Serializable {
@ColumnInfo
var name: String = ""
@ColumnInfo(index = true)
var statefk: Long = 0
}
@Entity
data class State(
@PrimaryKey
@ColumnInfo
var id: Long = 0
) : Serializable {
@ColumnInfo
var name: String = ""
}
¿Cómo puedo obtener una lista de direcciones listando las clases?
¿Cómo obtener un resultado como este en ANSI SQL?:
select ADDRESS.NAME ADDRESS
, CITY.NAME CITY
, STATE.NAME STATE
from ADDRESS
join CITY
on CITY.ID = ADDRES.CITYFK
join STATE
on STATE.ID = CITY.STATEFK
davy.ai
Para obtener una lista de direcciones con sus respectivos nombres de ciudad y estado, puede utilizar la siguiente consulta en Room:
Aquí, estamos seleccionando la columna
name
de las tablasAddress
,City
yState
, y dando a cada una el alias deADDRESS
,CITY
ySTATE
, respectivamente. Luego, estamos realizando una unión interna en las tablasCity
yState
para recuperar sus nombres, en función de sus relaciones de clave foránea conAddress
.Para mapear los resultados de esta consulta a una lista de objetos personalizados, puede definir la clase de datos
AddressList
de la siguiente manera:Tenga en cuenta que los nombres de propiedad de esta clase deben coincidir con los alias utilizados en la consulta.