Создание представлений для баз данных

Библиотека персистентности Room поддерживает представления базы данных SQLite, которые позволяют инкапсулировать запрос в класс. Классы, поддерживаемые запросами, называются в Room представлениями. Их можно использовать в качестве объектов данных в объекте доступа к данным (DAO).

Как создать представление

Чтобы создать представление, добавьте аннотацию @DatabaseView в класс. Задайте для аннотации запрос, который представляет класс.

Ниже приведен пример фрагмента кода представления:

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

Как связать представление с базой данных

Чтобы добавить это представление в базу данных, добавьте свойство views в аннотацию @Database приложения:

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