Cómo implementar vistas en una base de datos

La biblioteca de persistencias Room admite vistas de bases de datos SQLite, que te permiten encapsular una consulta en una clase. Room se refiere a estas clases respaldadas por consultas como vistas, y puedes usarlas como objetos de datos en un objeto de acceso a datos (DAO).

Cómo crear una vista

Para crear una vista, agrega la @DatabaseView anotación a una clase. Establece el valor de la anotación para la consulta que la clase representa.

En el siguiente fragmento de código, se proporciona un ejemplo de vista:

@DatabaseView(
    """
    SELECT User.id, User.name, User.departmentId, Department.name AS departmentName
    FROM User INNER JOIN Department ON User.departmentId = Department.id
    """
)
data class UserDetail(
    val id: Long,
    val name: String?,
    val departmentId: Long,
    val departmentName: String?
)

Cómo asociar una vista con tu base de datos

Para incluir esta vista en tu base de datos, agrega la propiedad views a la anotación @Database de tu app:

@Database(
    entities = [User::class, Department::class],
    views = [UserDetail::class],
    version = 1
)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}