使用Android房间关系搜索查询

时间:2019-10-09 05:42:05

标签: android android-room

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

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

3 个答案:

答案 0 :(得分:1)

查询多个相关表的理想方法是创建一个View。视图使用join合并了两个或多个表中的数据。

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

假设您有表格:

用户:ID,名称,部门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?
)

将视图添加到数据库:

@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查询视图。

答案 1 :(得分:0)

绝对有可能,您可以在DAO类中使用@Query,请阅读Room Database Documentation

  

@Query的示例

@Query("SELECT * FROM user")
List<User> getAll();

@Query("SELECT * FROM user WHERE uid IN (:userIds)")
List<User> loadAllByIds(int[] userIds);

@Query("SELECT * FROM user WHERE first_name LIKE :first AND " +
       "last_name LIKE :last LIMIT 1")
User findByName(String first, String last);

答案 2 :(得分:0)

使用@DB或@Query。

那应该很好用...

@Query(“ SELECT * FROM TABLE_NAME”) 列出getAll();

相关问题