Я думаю, что вы должны использовать RawQuery .
Поскольку ваш запрос сложен, и вы не знаете, как долго он выполняется, вам, вероятно, следует создать его во время выполнения и выполнить его.
Room проверьте правильность @Query во время компиляции, так что я думаю, вам будет трудно реализовать его таким образом.
Этот пример взят из документации:
@Dao
interface RawDao {
@RawQuery
User getUserViaQuery(SupportSQLiteQuery query);
}
SimpleSQLiteQuery query = new SimpleSQLiteQuery("SELECT * FROM User WHERE id = ? LIMIT 1", new Object[]{userId});
User user2 = rawDao.getUserViaQuery(query);