На данный момент существует открытый выпуск в Android Room для поддержки представлений базы данных в состоянии Fixed
, возможно, ожидание того, что создатели поддержат его, будет хорошим вызовом.
хотя, используя хакерский метод, вы можете сделать это:
Вы можете создать @Entity, похожий на ваше представление (в столбцах), а затем onCreate базы данных удалить таблицу, сгенерированную для этого объекта.
Room
.databaseBuilder(context, DueDatabase.class, DB_NAME)
.addCallback(new RoomDatabase.Callback() {
@Override
public void onCreate(@NonNull SupportSQLiteDatabase db) {
super.onCreate(db);
//Drop the fake table and create a view with the same name
db.execSQL("DROP TABLE view_name");
db.execSQL("CREATE VIEW view_name " +
"AS SELECT [...]"
);
}
})
.build();
этот способ позволит вам использовать имя представления в запросах и правильно отобразить полученные данные в вашем классе @Entity, хотя вы должны помнить, что этот подход нарушит миграцию.чтобы миграция работала, вам нужно найти обходной путь (возможно, вам придется отказаться от просмотра и воссоздать поддельную таблицу)