Номер Android: заказ Не работает

Я использую новый номер ORM для Android. И я столкнулся с проблемой. ORDER BY с аргументами не работает. Если я хочу использовать поле из параметра для ORDER BY, это не работает. Ничего не нарушал.

@Query("SELECT * FROM User ORDER BY :orderBY ASC") List<User> sortedFind(String orderBY); 

Но, когда я помещаю прямо в какое поле для сортировки, он работает, как ожидалось.

 @Query("SELECT * FROM User ORDER BY name ASC") List<User> sortedFind(); 

Это ошибка в комнате Android, или я делаю что-то неправильно?

    Что происходит

    Единственными значениями, которые вы можете передать в качестве параметров для методов @Dao являются значения, а не строки запроса. Причиной этого (я верю) является предотвращение проблем с SQL-инъекциями.

    Почему это так

    Например, запрос SELECT * emails WHERE uid = ? Затем установите значение как "1 OR WHERE isAdmin = true" . Это позволит людям запускать собственные запросы на основе вашей базы данных и делать то, что они хотят.

    Мое решение

    Я столкнулся с этой проблемой. Вот ссылка на мое решение .

    Мое решение состоит из двух частей. Первый DynamicQueryservice который генерирует строку запроса и массив значений на основе ввода, затем запускает необработанный запрос и возвращает Cursor . Во-вторых, Cursor2POJO mapper, поэтому мне не нужно много раз Cursor2POJO отображения курсоров для классов, а также не вводить потенциальные проблемы обслуживания. Я просто добавляю аннотации к моим классам (которые соответствуют именам столбцов комнаты), а lib обрабатывает остальные.

    Я разделил свой Cursor mapper на свой собственный lib для вашей выгоды, не стесняйтесь использовать его (просто сделал это так, если readme не ясен, или ошибки попали мне в комментарии).

    PS Моя библиотека не может использовать Room @ColumnInfo для получения имен столбцов, поскольку в настоящее время аннотирование задано как RetentionPolicy.CLASS, поэтому невозможно получить доступ через отражение. (Добавлен в трекер google https://issuetracker.google.com/issues/63720940 )