Как мне сделать JDO-запрос с помощью функции contains ()? - PullRequest
3 голосов
/ 11 декабря 2011

У меня есть класс с перечислением в качестве переменной экземпляра:

  public enum Races {
     Human, Elf, Orc, Troll
  }

  @PersistenceCapable(detachable="true")
  public class Crafter {
     @PrimaryKey
     @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
     private Key key;
     @Persistent
     private Races race;
  }

Мне удалось сохранить и получить экземпляры этого класса, это не проблема.

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

  Races[] races = new Races[] { Races.Orc, Races.Troll, };

  Query query = manager.newQuery(Crafter.class);
  query.setFilter(":raceParam.contains(race)");
  List<Crafter> crafters = (List<Crafter>) query.execute(Arrays.asList(races));

Это не работает, я получаю:

    Caused by: java.lang.IllegalArgumentException: race: ca.forklabs.wowtradeskills.web.shared.Races is not a supported property type.
      at com.google.appengine.api.datastore.DataTypeUtils.checkSupportedSingleValue(DataTypeUtils.java:184)
      at com.google.appengine.api.datastore.DataTypeUtils.checkSupportedValue(DataTypeUtils.java:149)
      at com.google.appengine.api.datastore.Query$FilterPredicate.<init>(Query.java:574)
      at com.google.appengine.api.datastore.Query.addFilter(Query.java:260)
      at org.datanucleus.store.appengine.query.DatastoreQuery.addLeftPrimaryExpression(DatastoreQuery.java:1343)
            ...

Как выполнять запросы IN, используя JDO с Google App Engine?

Некоторые ссылки:

1 Ответ

0 голосов
/ 11 декабря 2011

содержит в JDOQL определяется как в Java ... в коллекции (поле). У вас есть массив. Синтаксис JDOQL соответствует синтаксису Java

...