Расскажите про Database View в Room

Начиная с версии 2.1.0 Room поддерживает SQLite database views.

Database Views позволяют инкапсулировать запрос в БД внутри класса. Такие классы представляют из себя простенькие объекты с данными.

Чтобы создать такой класс необходимо добавить аннотацию @DatabaseView к классу, а в качестве аргумента аннотации передать запрос, который данный класс должен представлять. Вот пример:

@DatabaseView("SELECT worker.id, worker.name, worker.departmentId," +
        "department.name AS departmentName FROM worker " +
        "INNER JOIN department ON worker.departmentId = department.id")
data class WorkerDetail(
    val id: Long,
    val name: String?,
    val departmentId: Long,
    val departmentName: String?
)

А чтобы добавить данный класс как часть БД вашего приложения необходимо добавить его в свойство views аннотации @Database, как тут:

@Database(entities = [Worker::class],
          views =[WorkerDetail::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun workerDao(): WorkerDao
}
Поделиться уроком

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *