Room:使用Room的关系实体,(一对多)使用条件而不是所有元素来检索一个

时间:2019-05-11 11:41:29

标签: android android-sqlite android-room android-database

我的问题与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();

什么是最好的方式来查询宠物实体中的最新宠物以及用户

1 个答案:

答案 0 :(得分:1)

首先,@Relation将始终检索列表或集合,因此您不能将单个Pet定义为关系的结果。

我认为您可以做两件事: 1.创建一个查询以退出加入所需宠物的行列 2.创建正确的关系List<Pet>,然后扫描最新关系。

如果您想节省一点时间,可以创建一个POJO,该POJO仅保存宠物列表的时间和ID,以便仅获取所需的最少数据,扫描列表以获取最新的宠物,然后查询该列表宠物。