在新的 Room 持久性库中创建等效的视图

CREATE VIEW equivalent in new Room persistence library

我的应用程序中有前 10 名用户的 RecyclerView。我用一个游标填充它,该游标从 sql 中的 SQL VIEW 读取,该游标从通过外键关联的不同表中聚合。我想重新编写 SQLite 样板以使用新的 Room 库。但是,我不知道如何在 Room 中实现 SQL VIEW。 DAO 似乎只适用于实体(表),或者我可能只是遗漏了一些东西。

您还可以使用从 DAO 连接多个表的 POJO。来自 Room documentation:

@Dao
public interface MyDao {
   @Query("SELECT user.name AS userName, pet.name AS petName "
          + "FROM user, pet "
          + "WHERE user.id = pet.user_id")
   public LiveData<List<UserPet>> loadUserAndPetNames();

   // You can also define this class in a separate file, as long as 
   // you add the "public" access modifier.
   static class UserPet {
       public String userName;
       public String petName;
   }
}

这也适用于聚合函数。

2.1.0-alpha01 版本的 Room 库开始,您可以定义 @DatabaseView 内部使用 VIEW.

的 SQLite

2.1.0-alpha02 开始,您甚至可以将它们用于用 @Relation 注释的字段。

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

示例摘自https://developer.android.com/training/data-storage/room/creating-views