Использование списка в предложении where в комнате - PullRequest
0 голосов
/ 09 мая 2018

Я использую Room for DB и у меня есть таблица с названием «Продукты». Класс продуктов Entity имеет теги ArrayList'String '.

@Entity Class Products { some auto generate primary key; String name; ArrayList<String>tags;}

Я хочу искать товары по тегу, так как это сделать? Можем ли мы использовать теги в предложении where? Я попробовал ниже, но не сработало:

select name from Products where tags IN (:value) List<String> getSearchedProducts(String value);

Использование этого конвертера типов для сохранения списка.

public class StringListConverters {

private static Gson gson = new Gson();

@TypeConverter
public static ArrayList<String> fromString(String data) {
    Type listType = new TypeToken<ArrayList<String>>() {}.getType();
    return gson.fromJson(data, listType);
}

@TypeConverter
public static String fromArrayList(ArrayList<String> list) {
    return gson.toJson(list);
}

}

Для поиска по имени это работает, но для поиска по тегу - нет. Больше, чем синтаксис, исправление ошибок и т. Д. Здесь я ищу подход к поиску коллекций в комнате DB.

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Я получил ответ, это довольно просто. Вот как мы ищем ArrayList, который хранится в столбце.

select name from Products where tags Like :value List<String> getSearchedProducts(String value);

Это имеет смысл также потому, что Room преобразует список в строковые записи и сохраняет их в столбце, и, согласно моему предположению, при поиске в ArrayList он будет зацикливаться в этом столбце, как цикл foreach.

И для поиска по имени или по тегу вы будете делать так:

select name from Products where name Like :value OR tags Like :value List<String> getSearchedProducts(String value);

0 голосов
/ 10 мая 2018

Что вы пытаетесь добиться работ, у меня была такая же проблема. В моем случае у меня был String[], он не работает, если вы предоставляете String, разделенные запятыми, но он должен работать и с ArrayList.

Если вы не много манипулируете списком tags и не добавляете в него элементы после его создания, используйте String[]. Таким образом, вам не нужно использовать TypeConverter.

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