在新的Room持久性库中创建等效的CREATE VIEW

时间:2017-09-04 05:15:08

标签: android sqlite android-room

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

2 个答案:

答案 0 :(得分:4)

您还可以使用从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;
   }
}

这也适用于聚合函数。

答案 1 :(得分:2)

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

的示例