gpt4 book ai didi

java - GAE - 使用枚举字段和 'contains' 运算符过滤数据时 JDO 查询失败

转载 作者:行者123 更新时间:2023-12-01 05:13:28 25 4
gpt4 key购买 nike

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

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

最佳答案

目前可以通过引用来解决,例如

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

这对我来说很有效。

关于java - GAE - 使用枚举字段和 'contains' 运算符过滤数据时 JDO 查询失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11678803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com