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

标签 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()
)

最佳答案

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

在 Android 中,使用 Room Persistance library ,你可以创建这样一个 View ,然后你可以查询 View 的字段。您可以这样做:

假设你有 table :

用户:ID、姓名、部门 ID

部门:ID、名称

创建 View :

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

将 View 添加到数据库:

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

创建 DAO:

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

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

关于android - 使用 Android 房间关系进行搜索查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58297705/

相关文章:

java - Android中Content Provider的Uri中的 "content://"可以替换吗?

android - NativeScript sampleGroceries 应用程序无法编译

java - 在 Android 中将数据传递到寻呼机适配器内的 fragment 时出现问题

android - 如何使用“房间关系”注释一次加入多个对象?

android - 使用 RXJava2 Flowable 过滤数据

android - 如何在 ConstraintLayout 中水平放置两个 View ?

android - YouTube 播放器的下一个上一个按钮在第一个视频中不可见

android - 表间关系问题

android - 添加房间依赖性会产生明显的合并错误

android - Room Persistence 库中的 HashMap