es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para obtener una lista de direcciones con sus respectivos nombres de ciudad y estado, puede utilizar la siguiente consulta en Room:

    @Query("SELECT Address.name AS ADDRESS, City.name AS CITY, State.name AS STATE " +
            "FROM Address " +
            "INNER JOIN City ON City.id = Address.cityfk " +
            "INNER JOIN State ON State.id = City.statefk")
    fun getAddressList(): List<addresslist>
    

    Aquí, estamos seleccionando la columna name de las tablas Address, City y State, y dando a cada una el alias de ADDRESS, CITY y STATE, respectivamente. Luego, estamos realizando una unión interna en las tablas City y State para recuperar sus nombres, en función de sus relaciones de clave foránea con Address.

    Para mapear los resultados de esta consulta a una lista de objetos personalizados, puede definir la clase de datos AddressList de la siguiente manera:

    data class AddressList(
        val ADDRESS: String, 
        val CITY: String, 
        val STATE: String
    )
    

    Tenga en cuenta que los nombres de propiedad de esta clase deben coincidir con los alias utilizados en la consulta.

Comments are closed.