Criar visualizações em um banco de dados

A versão 2.1.0 e versões posteriores da biblioteca de persistência do Room oferece compatibilidade com visualizações de banco de dados do SQLite (link em inglês), o que permite encapsular uma consulta em uma classe. O Room se refere a essas classes compatíveis por consulta como visualizações, e elas se comportam como objetos de dados simples quando usadas em um DAO.

Criar uma visualização

Para criar uma visualização, adicione a anotação @DatabaseView a uma classe. Defina o valor da anotação como a consulta que a classe representará.

O snippet de código a seguir fornece um exemplo de visualização.

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;
    }
    

Associar uma visualização ao seu banco de dados

Para incluir essa visualização como parte do banco de dados do app, inclua a propriedade views na anotação @Database do 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();
    }