3

我有一個枚舉作爲實例變量的類:如何使用contains()做一個JDO查詢?

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與谷歌應用程序引擎的查詢?

一些參考:

回答

0

包含JDOQL在Java定義的一樣......在一個集合(場)。你有一個數組。 JDOQL語法遵循Java語法

+0

我沒有關注你。我將一個列表作爲參數傳遞給execute()方法,並在我的參數上調用contains()。我究竟做錯了什麼? – user1091789

+0

啊,是的。所以你使用的GAE版本可能不支持Collection參數;我可以評論的所有JDOQL – DataNucleus

+0

mr datanucleus的有效性,我擁有datanucleus datanucleus-api-jdo-3.1.0的GAE的最後一個版本,這不起作用!有什麼想法嗎?即使是在絃樂中。 –