Начиная с версии 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
}