Комната: сущности отношений, использующие Комнату, (Один ко многим) Извлечение одного с условием, а не со всеми элементами - PullRequest
0 голосов
/ 11 мая 2019

Мой вопрос аналогичен 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
}

В настоящее время POJO UserWithPets составляет

// 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();

Что будет лучшим способом сделать запрос только с последним питомцем из Pet Entity вместе с пользователем

1 Ответ

1 голос
/ 11 мая 2019

Во-первых, @Relation всегда будет получать список или набор, поэтому вы не можете определить одного питомца как результат отношения.

Я думаю, что вы можете сделать 2 вещи: 1. Создать запрос коставьте присоединиться к нужному питомцу. 2. Создайте правильное отношение List<Pet>, а затем просканируйте Список последних.

Если вы хотите сэкономить немного, вы можете создать POJO, который содержит только время и идентификаторсписка домашних животных, чтобы вы могли получить только минимальные необходимые данные, отсканируйте список на наличие последних и запросите этого домашнего питомца.

...