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

2019-05-11 android android-sqlite android-room android-database

我的问题与Android Room类似:使用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();

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

Answers

首先,仅自Room版本2.2.0-alpha01起,您才能将单个Pet定义为该关系的结果

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

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

Related