2010-05-03 30 views
2

查詢我有一個簡單的類,下面的相關細節:App Engine的 - 使用一個類成員作爲參數

@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。在谷歌打到目前爲止,我已經找到了建議:

  • 使用query.declareImports指定類即q.declareImports(「com.test.zach.SimpleCategory.type」);
  • 在declareParameters

無論這些建議已經制定指定SimpleCategory的全名。通過刪除.type並重新編譯,我可以驗證declareParameters 可以看到SimpleCategory就好了,儘管事實上該方法的其餘部分完全可見,但它根本無法看到SimpleCategory.type。

我錯過了什麼?

回答

0

某些似乎對我而言的工作是使用隱式參數編寫查詢字符串,而不是使用declareParameters()方法。

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

謝謝,這似乎工作得很好,我需要重新訪問declareParameters()上的文檔,我想我錯過了一些東西。 – 2010-10-28 18:06:16

1

You elided(...public static enum type本身是否宣佈爲@PersistenceCapable。如果不是,那麼可以解釋爲什麼查詢分析程序無法解析對類的引用。

+0

枚舉不是@PersistenceCapable。我認爲只有類和嵌入類被標記爲@PersistenceCapable。關於這個主題的兩本書沒有什麼可說的。 將@PersistenceCapable添加到枚舉中稍微改變了錯誤佔用。稍後當我冷卻一下時,我會進行調試。調試應用程序引擎是我曾經處理過的最令人生畏,最令人沮喪的一組庫。 – 2010-05-04 05:54:55

+0

@Zach - 抱歉,我不知道這是否是問題,還是枚舉需要是@PersistenceCapable。我只是提出另一種嘗試的可能性。我感到你的痛苦。我剛剛開始使用GAE JDO,規則和陷阱也讓我失望。 – 2010-05-04 09:41:42