Как правильно получить статистические столбцы в запросах, используя GreenDao?
GreenDao и ORM в целом заставляют нас значительно выиграть во времени разработки и удобстве обслуживания по сравнению с использованием необработанных запросов.
Но я чувствую, что работаю в случае, когда ORM, особенно GreenDao, ограничен по сравнению с выполнением необработанного запроса:
Пусть A и B две сущности; А и Б имеют отношение один ко многим; A - это "одна" сторона, а B - "много". Мне нужно получить список объектов A и для каждого из них получить количество связанных объектов B, соответствующих определенным критериям.
Примером из реальной жизни может служить приложение для обмена сообщениями, которое отображает список потоков, содержащих несколько сообщений; Рядом с каждым потоком будет показано количество непрочитанных сообщений (или общее количество сообщений, если нет условий).
Используя сырой SQL это легко; Я бы получил статистический столбец, используя COUNT
заявление и все тут. Недостатком является необходимость вручную анализировать результаты и создавать список объектов; и мы теряем выгоду от ленивой загрузки с использованием предоставленной GreenDao LazyList
,
Другое решение было бы позвонить queryRawCreate()
на объекте А; проблема заключается в том, что сгенерированная сущность должна иметь переменную-член, не связанную напрямую со столбцом базы данных, и заставить GreenDao отобразить столбец агрегата в эту переменную-член. Интересно, поддерживает ли текущая версия эту функцию.
Должен ли я пойти на полное решение для исходного SQL или я могу использовать GreenDao, даже частично, для автоматического возврата списка сущностей, которые содержат агрегированные столбцы?