我的问题与Android Room: Insert relation entities using Room类似 但变化不大
@Entity
public class Pet {
@PrimaryKey
public int id; // Pet id
public int userId; // User id
public String name;
//Added EXTRA column
public long time;// pet since have
}
当前UserWithPets POJO为
// Note: No annotation required at this class definition.
public class UserWithPets {
@Embedded
public User user;
@Relation(parentColumn = "id", entityColumn = "userId", entity = Pet.class)
public List<Pet> pets;
}
查询是
@Query("SELECT * FROM User")
public List<UserWithPets> loadUsersWithPets();
但是我需要这样的东西 UserWithLatestPet POJO:
public class UserWithLatestPet {
@Embedded
public User user;
@Relation(parentColumn = "id", entityColumn = "userId", entity = Pet.class)
public Pet latestPet;//Retrieve only latest (since time) pet per user
}
//Query
@Query("SELECT * FROM User")
public List<UserWithLatestPet> loadUserWithLatestPet();
什么是最好的方式来查询宠物实体中的最新宠物以及用户
答案 0 :(得分:1)
首先,@Relation
将始终检索列表或集合,因此您不能将单个Pet定义为关系的结果。
我认为您可以做两件事:
1.创建一个查询以退出加入所需宠物的行列
2.创建正确的关系List<Pet>
,然后扫描最新关系。
如果您想节省一点时间,可以创建一个POJO,该POJO仅保存宠物列表的时间和ID,以便仅获取所需的最少数据,扫描列表以获取最新的宠物,然后查询该列表宠物。