Проблема с JDOQL для получения результатов с запросом "содержит"
Я использую Google App Engine для проекта, и мне нужно сделать несколько запросов к базе данных. Я использую JDOQL, чтобы спросить базу данных. В моем случае я хочу получить университет, который содержит подстроку "массив". Я думаю, что мой запрос содержит ошибку, потому что он возвращает названия университетов в алфавитном порядке, а не те, которые содержат подстроку.
Query query = pm.newQuery("SELECT FROM " + University.class.getName() + " WHERE name.contains("+array+") ORDER BY name RANGE 0, 5");
Может кто-нибудь сказать мне, что не так в моем запросе?
Спасибо за помощь!
РЕДАКТИРОВАТЬ
У меня есть список магазинов университетов, и у меня есть ящик для предложений, где мы можем запросить университет по его имени. И я хочу, чтобы автозаполнение запрошенного имени.
2 ответа
Движок приложения не поддерживает полнотекстовый поиск, вы должны отметить звездочку 217. Однако возможен частичный обходной путь. И в вашем случае я думаю, что это хорошо подходит.
Прежде всего, настройте свою модель так, чтобы была также версия имени в нижнем (или верхнем регистре) - я предполагаю, что она называется lname. Если вы не хотите, чтобы ваши запросы были чувствительными к регистру.
Затем вы запрашиваете так:
Query query = pm.newQuery(University.class);
query.setFilter("lname >= startNameParam");
query.setFilter("lname < stopNameParam");
query.setOrdering("lname asc");
query.declareParameters("String startNameParam");
query.declareParameters("String stopNameParam");
query.setRange(0, 5);
List<University> results = (List<University>) query.execute(search_value, search_value + "z");
Правильный способ сделать это так:
Query query = pm.newQuery(University.class,":p.contains(name)");
query.setOrdering("name asc");
query.setRange(0, 5);
List univs = q.execute(Arrays.asList(array));
(примечание- в этом случае :p
является неявным именем параметра, которое можно заменить любым именем)