Queries on partitioned regions that involve an Enum object field may give incorrect results when the relevant domain class implements PdxSerializable.
For example:
gfsh>query --query="select testEnum from /exampleRegion where testEnum.code = 1 " Result : true startCount : 0 endCount : 20 Rows : 0 NEXT_STEP_NAME : END
public enum TestEnum {
A(1, "AA"), B(2, "BB"), C(3, "CC"), D(4, "DD");
private int code;
private String desc;
private TestEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
public class TestStatus implements PdxSerializable {
public TestStatus() {
}
public TestStatus(TestEnum testEnum) {
super();
this.testEnum = testEnum;
}
.....
}
Queries like the above are invalid because the call to testEnum.code involves a static class and method invocation, since Java enum types are implicitly static, which is not supported.
To write a query using the value of an Enum object field on a partitioned region, you must use the toString method of the enum object or use a query bind parameter.
For example:
gfsh>query --query="select testEnum from /exampleRegion where testEnum.code.toString() = 1"