在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()
)
答案 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();