Запрос типа преобразованный список объектов в комнате - PullRequest
0 голосов
/ 09 октября 2018

у меня есть таблица, которая выглядит следующим образом

@Query("SELECT * FROM Product WHERE Name = :name")
List<Product> getProducts(String name);

И тогда я смогу получить доступ к списку документов для каждого объекта Product.Однако я также хотел бы иметь дело только с продуктами, которые имеют определенные документы.Я мог бы получить все продукты с помощью запроса, как описано выше, а затем вручную отфильтровать нужные мне документы, но это становится довольно болезненным, когда я ищу только очень конкретные документы.

Можно ли также запроситьна основе переменных документа, не являющихся отдельной таблицей?

Что-то вроде ...

@Query("SELECT * FROM Product WHERE Name = :name AND Document.name = :documentName")
List<Product> getProducts(String name, String documentName);

Спасибо.

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Нельзя запрашивать переменные класса Document, так как они не хранятся в отдельной таблице. @ TypeConverter аннотация преобразует ваш список документов в некоторые предопределенные типы данных, такие как String.В основном он хранит список Document в виде строки Gson в столбце таблицы Product, поэтому мы не можем получить доступ к полю name класса Document в запросе SQL, например Document.name .

Прочитайте опцию # 2, заданную @ CommonsWare здесь

Итак, для доступа к ней вам нужно создать отдельную таблицу для Document.

0 голосов
/ 18 октября 2018

Вы можете использовать оператор LIKE sql для поиска в столбце json со списком преобразованных документов.Пример: Предположим, что у нас есть документ, преобразованный таким образом для хранения в db:

{
    name: "Title",
    url: "Your_url"
}

Таким образом, ваш запрос для продукта с таким документом в списке должен выглядеть следующим образом:

SELECT * FROM Product WHERE Name = :name AND Documents LIKE :documentLikeExpr

Где

String documentLikeExpr = "%name: \"Title\"%";

% в выражении означают ноль, один или несколько символов.

Поэтому единственное, что мы здесь делаем, - это поиск части строки внутри столбца с использованием возможностей языка SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...