1

Datastore エンティティ クラスで Enum フィールドを使用しています。

public enum MyEnum{
  A(0x9001L),
  B(0x9002L),
  C(0x9003L),
  D(0x9004L),
  private long value;
  private MyEnum(long value) {
    this.value = value;
  }
};

実在物

@PersistenceCapable
public class Log implements Serializable, Comparable<Object>, Cacheable {

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;

    @Persistent
    private MyEnum myEnumVariable;  
}        

Enum 型を 1 つだけフィルタリングしてクエリを作成すると、

declareParams.append(",Long myEnumVariable");
filterQuery.append(" this.myEnumVariable == myEnumVariable");

..その後、コードは正常に動作します。

しかし、複数の列挙型をフィルタリングするクエリを作成すると

declareParams.append(",List myEnumList");
filterQuery.append(" myEnumList.contains(this.myEnumVariable )");

エラーが表示されます -

java.lang.IllegalArgumentException: MyEnum : com.xxx.xxx.MyEnum は、サポートされているプロパティ タイプではありません。com.google.appengine.api.datastore.DataTypeUtils.checkSupportedSingleValue(DataTypeUtils.java:184) で com.google.appengine.api.datastore.DataTypeUtils.checkSupportedValue(DataTypeUtils.java:149) で com.google.appengine.api .datastore.Query$FilterPredicate.(Query.java:619) com.google.appengine.api.datastore.Query.addFilter(Query.java:261) で org.datanucleus.store.appengine.query.DatastoreQuery.addLeftPrimaryExpression( DatastoreQuery.java:1343) org.datanucleus.store.appengine.query.DatastoreQuery.addExpression(DatastoreQuery.java:1070) org.datanucleus.store.appengine.query.DatastoreQuery.addExpression(DatastoreQuery.java:1054) org .datanucleus.store.appengine.query.DatastoreQuery.

注: オブジェクト「myEnumList」は、「MyEnum」タイプの要素のコレクションです。「Long」タイプの要素のリストを使用すると、エラーは表示されませんが、空の結果が返されます

4

1 に答える 1

0

現在、次のように引用することで解決できます

filterQuery.append(" this.myEnumVariable == 'myEnumVariable'");

それは私のために働いています。

于 2013-05-20T12:29:39.197 に答える