在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/