有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java GAE JDO查询在使用枚举字段和“contains”运算符筛选数据时失败

我在数据存储实体类中使用枚举字段

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 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.(Query.java:619) at com.google.appengine.api.datastore.Query.addFilter(Query.java:261) at org.datanucleus.store.appengine.query.DatastoreQuery.addLeftPrimaryExpression(DatastoreQuery.java:1343) at org.datanucleus.store.appengine.query.DatastoreQuery.addExpression(DatastoreQuery.java:1070) at org.datanucleus.store.appengine.query.DatastoreQuery.addExpression(DatastoreQuery.java:1054) at org.datanucleus.store.appengine.query.DatastoreQuery.addExpression(DatastoreQuery.java:1053) at org.datanucleus.store.appengine.query.DatastoreQuery.addFilters(DatastoreQuery.java:1031) at org.datanucleus.store.appengine.query.DatastoreQuery.performExecute(DatastoreQuery.java:238) at org.datanucleus.store.appengine.query.JDOQLQuery.performExecute(JDOQLQuery.java:92) at org.datanucleus.store.query.Query.executeQuery(Query.java:1489) at org.datanucleus.store.query.Query.executeWithMap(Query.java:1398) at org.datanucleus.jdo.JDOQuery.executeWithMap(JDOQuery.java:334)

注意:对象“myEnumList”是“MyEnum”类型元素的集合。 当我使用“Long”类型元素的列表时,我看不到错误,但返回空结果


共 (1) 个答案

  1. # 1 楼答案

    现在你可以通过引用,比如

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

    这样对我很有效