Ya está disponible la segunda Vista previa para desarrolladores de Android 11; pruébala y comparte tus comentarios.

Cómo implementar vistas en una base de datos

La versión 2.1.0 de la biblioteca de persistencias Room (y versiones posteriores) proporciona compatibilidad con vistas de bases de datos SQLite, lo que te permite encapsular una consulta en una clase. Room se refiere a estas clases respaldadas por consultas como vistas, y estas se comportan de la misma manera que los objetos de datos simples cuando se usan en un DAO.

Cómo crear una vista

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

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

Kotlin

    @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?
    )
    

Java

    @DatabaseView("SELECT user.id, user.name, user.departmentId," +
                  "department.name AS departmentName FROM user " +
                  "INNER JOIN department ON user.departmentId = department.id")
    public class UserDetail {
        public long id;
        public String name;
        public long departmentId;
        public String departmentName;
    }
    

Cómo asociar una vista con tu base de datos

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

Kotlin

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

Java

    @Database(entities = {User.class}, views = {UserDetail.class},
              version = 1)
    public abstract class AppDatabase extends RoomDatabase {
        public abstract UserDao userDao();
    }