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 búsqueda en una clase. Room se refiere a las clases respaldadas por búsquedas como vistas, que se comportan igual 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 búsqueda que la clase debe representar.

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 la vista como parte de la base de datos de tu app, incluye la propiedad views en la anotación @Database de tu app como se muestra a continuación:

Kotlin

@Database(entities = [User::class],
          views =[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();
}