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