Проблема с JDOQL для получения результатов с запросом «содержит» - PullRequest
1 голос
/ 21 сентября 2010

Я использую Google App Engine для проекта, и мне нужно выполнить несколько запросов к базе данных.Я использую JDOQL, чтобы спросить базу данных.В моем случае я хочу получить университет, который содержит подстроку «массив».Я думаю, что мой запрос содержит ошибку, потому что он возвращает названия университетов в алфавитном порядке, а не те, которые содержат подстроку.

Query query = pm.newQuery("SELECT FROM " + University.class.getName() + " WHERE name.contains("+array+") ORDER BY name RANGE 0, 5");

Может кто-нибудь сказать мне, что не так в моем запросе?

Спасибо за вашу помощь!

РЕДАКТИРОВАТЬ

У меня есть список магазинов университетов, и у меня есть коробка с предложением, где мы можем запросить университет по его имени.И я хочу, чтобы автозаполнение запрошенного имени.

Ответы [ 2 ]

1 голос
/ 03 октября 2010

Движок приложения не поддерживает полнотекстовый поиск, вы должны указать звездочку 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");
0 голосов
/ 21 сентября 2010

Правильный способ сделать это так:

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 - это неявное имя param , которое можно заменить любым именем)

...