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;  
}        

当我通过仅过滤一种枚举类型进行查询时

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”类型元素的集合。当我使用“长”类型元素列表时,我看不到错误,但返回空结果

4

1 回答 1

0

目前你可以通过引用来解决它,比如

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

它对我有用。

于 2013-05-20T12:29:39.197 回答