Как установить несколько параметров при запросе в GAE с JDO в Java? - PullRequest
1 голос
/ 29 ноября 2011

Я слежу за документацией на этом сайте: http://code.google.com/intl/sv-SE/appengine/docs/java/datastore/jdo/queries.html

Оттуда я узнал, как делать запросы, но мне кажется, что я работаю только с одним параметром.Вот как я делаю это успешно:

javax.jdo.Query q1 = pm.newQuery(Player.class);

q1.setFilter("isOpen == true");

List<Player> players = (List<Player>) q1.execute();

, который выбирает мне все объекты Player с логическим значением isOpen == true.Я могу сделать то же самое с Long, который тоже работает.

Вот проблема: При объединении двух условий, подобных этому:

javax.jdo.Query q1 = pm.newQuery(Player.class);

q1.setFilter("isOpen == true && lastPing > 100");

List<Player> players = (List<Player>) q1.execute();

Приложение вылетает.Вот ошибка, которую я получаю:

Необнаруженное исключение из сервлета com.google.appengine.api.datastore.DatastoreNeedIndexException: соответствующий индекс не найден.Рекомендуемый индекс для этого запроса: datastore-index kind = "Player" ancestor = "false" source = "manual" name свойства = "isOpen" direction = "asc" name свойства = "lastPing" direction = "asc" datastore-index

Итак, кто-нибудь знает, почему это происходит?Любая помощь с благодарностью.

1 Ответ

3 голосов
/ 29 ноября 2011

Нельзя выполнить фильтр неравенства вместе с другим фильтром, если у вас нет индекса для столбца, для которого вы проводите сравнение неравенства. Добавьте это в datastore-indexes.xml в папке WEB-INF и разверните его (либо полное развертывание, либо appcfg update-indexes):

<datastore-index kind="Player" ancestor="false">
        <property name="isOpen" direction="asc"/>
        <property name="lastPing" direction="asc"/>
    </datastore-index>
...