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) 
      ... 

どのようにしてはGoogle App Engineと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の最新バージョンを持っていますが、これは動作しません!何かご意見は?文字列上でさえも。 –

関連する問題