App Engine - 使用类成员作为参数进行查询

时间:2010-05-03 09:48:40

标签: google-app-engine jdo

我有一个简单的课程,相关详情如下:

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class SimpleCategory implements Serializable{
... 
 public static enum type{
  Course,
  Category,
  Cuisine
 }

 @Persistent
 public type t;
...
}

我试图查询所有相同类型的SimpleCategory对象。

public SimpleCategory[] getCategories(SimpleCategory.type type) {
 PersistenceManager pm = PMF.get().getPersistenceManager();

 try{
  Query q = pm.newQuery(SimpleCategory.class);
  q.setFilter("t == categoryType");
  q.declareParameters("SimpleCategory.type categoryType");
  List<SimpleCategory> cats = (List<SimpleCategory>) q.execute(type);
...
}

这导致SimpleCategory.type的ClassNotResolvedException。到目前为止我发现的google点击率建议:

  • 使用query.declareImports指定类,即q.declareImports(“com.test.zach.SimpleCategory.type”);
  • 在declareParameters
  • 中指定SimpleCategory的完全限定名称

这些建议都没有奏效。通过删除.type和重新编译,我可以验证declareParameters 可以看到SimpleCategory就好了,它根本看不到SimpleCategory.type,尽管该方法的其余部分对它有完全的可见性。 / p>

我错过了什么?

2 个答案:

答案 0 :(得分:1)

您遗漏了...public static enum type本身是否被宣布为@PersistenceCapable。如果不是,这可能解释了为什么查询解析器无法解析对type类的引用。

答案 1 :(得分:0)

似乎对我有用的东西是使用隐式参数编写查询字符串而不使用declareParameters()方法。

q.setFilter("t == :categoryType");
List<SimpleCategory> cats = (List<SimpleCategory>) q.execute(type)