使用 Android 房间关系进行搜索查询

Ana*_*and 2 android android-room

在Android房间关系中,是否可以使用相关表的属性来使用搜索查询。下面是我的表结构。在此,我将交易与付款和线路(交易项目)相关联。我的用户界面中有一个搜索字段,用户可以使用付款表内的付款金额进行搜索。如何形成查询来访问付款表的属性。

class TransactionWithPaymentAndLines(
    @Embedded
    var transactions: Transactions? = null,

    @Relation(
        parentColumn = "id",
        entityColumn = "transactionId",
        entity = Payment::class
    )
    var payments: List<Payment> = listOf(),

    @Relation(
        parentColumn = "id",
        entityColumn = "transactionId",
        entity = TransactionLines::class
    )
    var transactionLines: List<TransactionLines> = listOf()
)
Run Code Online (Sandbox Code Playgroud)

Chi*_*oni 5

理想的方式是创建一个视图来查询多个相关表。视图使用join组合来自两个或多个表的数据。

在Android中,使用Room Persistance库,您可以创建这样的视图,然后您可以查询视图的字段。您可以这样做:

假设您有表:

用户:id、姓名、部门 ID

部门:编号、姓名

创建视图:

@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?
)
Run Code Online (Sandbox Code Playgroud)

将视图添加到数据库:

@Database(entities = arrayOf(User::class),
          views = arrayOf(UserDetail::class), version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDetailDao(): UserDetailDao
}
Run Code Online (Sandbox Code Playgroud)

创建一个 DAO:

@Dao
interface UserDetailDao {
    @Query("SELECT * FROM UserDetail")
    fun loadAllUserDetails(): Array<UserDetail>
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用此 DAO 查询视图。