#room
На мой взгляд, одна из самых неудобных вещей, которая есть в Room — это работа со связью Many to Many.
Для тех, кто не использовал эту связь в Room, я расскажу вкратце. Больше деталей можно почитать тут.
Для её создания в Room есть следующий механизм:
🔸создаётся ассоциативная таблица с идентификаторами первой и второй таблицы;
🔸создаётся новый data-класс, где прописывается связь через
Junction, указывая эту таблицу в качестве связи.По идее, все довольно просто, но главная сложность возникает в фильтрации данных. В документации показан пример с получением полного списка данных, но если её нужно сделать, то единственный вариант — использование
@RawQuery вместо @Query и генерирования запроса вручную. Для такой связи нужно будет создать
INNER JOIN по ассоциативной таблице, и дальше применить нужные фильтры.Главный недостаток тут — отсутствие проверки правильности запроса во время компиляции, поэтому будьте особенно внимательны при его составлении.