У меня есть следующие отношения базы данных:
В словах: Один Order
имеет 0-n Books
, один Order
назначен одному Customer
,
В моем случае у меня есть bookId
. Я хочу запустить некоторую функцию, когда получу все связанные элементы (Книга, Заказ и Клиент) и когда я уверен, что все они существуют - мне нужно запустить ее только один раз .Я попытался решить его следующим образом:
ViewModel:
private LiveData<Book> book;
private LiveData<Order> order;
private LiveData<Customer> customer;
public MyViewModel(Application app) {
...
book = bookRepository.getBookLiveData(id);
order = Transformations.switchMap(book, b -> orderRepository.getOrder(b.getIdOrder()));
customer = Transformations.switchMap(order, o -> customerRepository.getCustomer(o.getIdCustomer()));
}
Однако это решение неэффективно, и я считаю, что это можно сделать более элегантным способом с помощью Room / LiveData.
Я попробовал и другой подход - создать следующий объект BookOrderCustomer
:
public class BookOrderCustomer {
@Embedded
public Book book;
@Embedded
public Order order;
@Embedded
public Customer customer;
}
Но это не сработало, как ожидалось, запрос Dao
всегда возвращал ноль.
Есть идеи, как решить это дело?Спасибо.