我有一个带有枚举作为实例变量的类:
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)
...
如何使用 JDO 和 Google App Engine 执行 IN 查询?
一些引用:
最佳答案
JDOQL 中的
contains 的定义类似于 Java ... 在集合(字段)上。你有一个数组。 JDOQL语法遵循Java语法
关于java - 如何使用 contains() 进行 JDO 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8461093/