首页 > 解决方案 > Android Room 将约束应用于关系

问题描述

我知道 Room 让我们与@Relation关键字建立 1-N 关系。虽然我想知道是否可以对这种关系应用条件。

假设我有以下 POJO

class UserAndPets {
    @Embedded
    lateinit var user: User

    @Relation(entityColumn = "ownerId", parentColumn = "userId")
    lateinit var pets: List<Pets>
}

interface UserDao {
    @Query("SELECT * FROM users WHERE userId = :userId LIMIT 1")
    fun getUserAndPetsForUserId(userId: String): UserAndPets?
}

上面的方法让我查询一个用户和他所有的宠物。虽然我有办法查询用户和他最近的 10 只宠物吗?还是某个类型的用户和他的所有宠物?

谢谢

标签: androidandroid-room

解决方案


如果 Pets 中的 Id 字段是自动递增的,那么这个查询应该会给你你正在寻找的结果:

@Query("SELECT * FROM pets WHERE ownerId = :userId ORDER BY Id DESC LIMIT 10")

顺便说一句,您的用户查询中的“LIMIT 1”是不必要的,查询将始终返回一个用户。


推荐阅读