Можно ли сделать @Transaction с предложением WHERE в Android ROOM? - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь сделать что-то вроде этого:

@Entity(tableName = "owner_table")
public class Owner {
    @PrimaryKey public long id;
    public String name;
    public int age;
}


@Entity(tableName = "pet_table")
public class Pet {
    @PrimaryKey public long petId;
    public long owner_id;
    public String petName;
}


public class OwnerAndPets {

    @Embedded
    public Owner owner;

    @Relation(
            parentColumn = "id",
            entityColumn = "owner_id",
            entity = Pet.class
    )

    public List<Pets> pets = new ArrayList<>();

    public Owner getOwner() {
        return owner;
    }

    public List<Pets> getPets(){
        return pets;
    }
}

, чтобы его можно было вызвать в OwnerDAO

@Dao
public interface OwnerDao {


    @Transaction
    @Query("SELECT * FROM owner_table WHERE id = :id")
    LiveData<OwnerAndPets> getOwnerAndPets(long id);


}

, чтобы потом можно было выбрать питомцев из ViewModel, как это:

getOwnerAndPets(ownerId).observe(mContextWeakReference.get(), new Observer<OwnerAndPets>() {
            @Override
            public void onChanged(OwnerAndPets ownerAndPets) {
                List<Pets> pets = ownerAndPets.getPets();
            }
        });

До сих пор это компилируется, но ownerAndPets.getPets (). Size всегда равен 0.

Одна из проблем здесь, может быть, я у меня есть отдельный репозиторий (PetsRespository) и DAO (PetsDAO) для @ Insert-ion of Pets, но опять же я с трудом понимаю, как этот интерфейс @Embedded должен действовать за кулисами, я просто предположил, что если владелец и Таблицы Pets инициализируются в одном и том же экземпляре базы данных, это pojo OwnerAndPets связывает обе таблицы.

Так что мне нужно сделать? Что я делаю не так?

...