Créer des vues dans une base de données

Les versions 2.1.0 et ultérieures de la bibliothèque de persistance Room fournissent une prise en charge pour les vues de la base de données SQLite, ce qui vous permet d'encapsuler une requête dans une classe. Room fait référence à ces classes reposant sur des requêtes en tant que vues. Elles se comportent comme des objets de données simples lorsqu'elles sont utilisées dans un DAO.

Créer une vue

Pour créer une vue, ajoutez l'annotation @DatabaseView à une classe. Définissez la valeur de l'annotation sur la requête que la classe doit représenter.

L'extrait de code suivant fournit un exemple de vue :

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

Associer une vue à votre base de données

Pour inclure cette vue dans la base de données de votre application, ajoutez la propriété views dans l'annotation @Database de votre application :

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