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」タイプの要素のリストを使用すると、エラーは表示されませんが、空の結果が返されます